-
Notifications
You must be signed in to change notification settings - Fork 250
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
btrfs-progs: kernel-lib: add rbtree_types.h from linux
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 <[email protected]>
- Loading branch information
Showing
3 changed files
with
46 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
/* 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 |