c1b24d742f
In order to use rb_root_cached we need to sync with kernel sources. Copy the file from linux.git/include/linux/rbtree_types.h and update so it's C++ protected for inclusion to libbtrfs and remove duplicate definitions. Signed-off-by: David Sterba <dsterba@suse.com>
43 lines
1,015 B
C
43 lines
1,015 B
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
#ifndef _LINUX_RBTREE_TYPES_H
|
|
#define _LINUX_RBTREE_TYPES_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct rb_node {
|
|
unsigned long __rb_parent_color;
|
|
struct rb_node *rb_right;
|
|
struct rb_node *rb_left;
|
|
} __attribute__((aligned(sizeof(long))));
|
|
/* The alignment might seem pointless, but allegedly CRIS needs it */
|
|
|
|
struct rb_root {
|
|
struct rb_node *rb_node;
|
|
};
|
|
|
|
/*
|
|
* Leftmost-cached rbtrees.
|
|
*
|
|
* We do not cache the rightmost node based on footprint
|
|
* size vs number of potential users that could benefit
|
|
* from O(1) rb_last(). Just not worth it, users that want
|
|
* this feature can always implement the logic explicitly.
|
|
* Furthermore, users that want to cache both pointers may
|
|
* find it a bit asymmetric, but that's ok.
|
|
*/
|
|
struct rb_root_cached {
|
|
struct rb_root rb_root;
|
|
struct rb_node *rb_leftmost;
|
|
};
|
|
|
|
#define RB_ROOT (struct rb_root) { NULL, }
|
|
#define RB_ROOT_CACHED (struct rb_root_cached) { {NULL, }, NULL }
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|