btrfs-progs: kernel-lib: sync include/rtree.h
Minor fixups to comments. Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
d3585221fc
commit
8e79d40e8f
|
@ -19,11 +19,11 @@
|
||||||
linux/include/linux/rbtree.h
|
linux/include/linux/rbtree.h
|
||||||
|
|
||||||
To use rbtrees you'll have to implement your own insert and search cores.
|
To use rbtrees you'll have to implement your own insert and search cores.
|
||||||
This will avoid us to use callbacks and to drop dramatically performances.
|
This will avoid us to use callbacks and to drop drammatically performances.
|
||||||
I know it's not the cleaner way, but in C (not in C++) to get
|
I know it's not the cleaner way, but in C (not in C++) to get
|
||||||
performances and genericity...
|
performances and genericity...
|
||||||
|
|
||||||
See Documentation/rbtree.txt for documentation and samples.
|
See Documentation/core-api/rbtree.rst for documentation and samples.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _LINUX_RBTREE_H
|
#ifndef _LINUX_RBTREE_H
|
||||||
|
@ -47,9 +47,9 @@ extern "C" {
|
||||||
|
|
||||||
#define rb_entry(ptr, type, member) container_of(ptr, type, member)
|
#define rb_entry(ptr, type, member) container_of(ptr, type, member)
|
||||||
|
|
||||||
#define RB_EMPTY_ROOT(root) ((root)->rb_node == NULL)
|
#define RB_EMPTY_ROOT(root) (READ_ONCE((root)->rb_node) == NULL)
|
||||||
|
|
||||||
/* 'empty' nodes are nodes that are known not to be inserted in an rtbree */
|
/* 'empty' nodes are nodes that are known not to be inserted in an rbtree */
|
||||||
#define RB_EMPTY_NODE(node) \
|
#define RB_EMPTY_NODE(node) \
|
||||||
((node)->__rb_parent_color == (unsigned long)(node))
|
((node)->__rb_parent_color == (unsigned long)(node))
|
||||||
#define RB_CLEAR_NODE(node) \
|
#define RB_CLEAR_NODE(node) \
|
||||||
|
@ -74,8 +74,8 @@ extern struct rb_node *rb_next_postorder(const struct rb_node *);
|
||||||
extern void rb_replace_node(struct rb_node *victim, struct rb_node *new_node,
|
extern void rb_replace_node(struct rb_node *victim, struct rb_node *new_node,
|
||||||
struct rb_root *root);
|
struct rb_root *root);
|
||||||
|
|
||||||
static inline void rb_link_node(struct rb_node * node, struct rb_node * parent,
|
static inline void rb_link_node(struct rb_node *node, struct rb_node *parent,
|
||||||
struct rb_node ** rb_link)
|
struct rb_node **rb_link)
|
||||||
{
|
{
|
||||||
node->__rb_parent_color = (unsigned long)parent;
|
node->__rb_parent_color = (unsigned long)parent;
|
||||||
node->rb_left = node->rb_right = NULL;
|
node->rb_left = node->rb_right = NULL;
|
||||||
|
@ -89,13 +89,21 @@ static inline void rb_link_node(struct rb_node * node, struct rb_node * parent,
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rbtree_postorder_for_each_entry_safe - iterate over rb_root in post order of
|
* rbtree_postorder_for_each_entry_safe - iterate in post-order over rb_root of
|
||||||
* given type safe against removal of rb_node entry
|
* given type allowing the backing memory of @pos to be invalidated
|
||||||
*
|
*
|
||||||
* @pos: the 'type *' to use as a loop cursor.
|
* @pos: the 'type *' to use as a loop cursor.
|
||||||
* @n: another 'type *' to use as temporary storage
|
* @n: another 'type *' to use as temporary storage
|
||||||
* @root: 'rb_root *' of the rbtree.
|
* @root: 'rb_root *' of the rbtree.
|
||||||
* @field: the name of the rb_node field within 'type'.
|
* @field: the name of the rb_node field within 'type'.
|
||||||
|
*
|
||||||
|
* rbtree_postorder_for_each_entry_safe() provides a similar guarantee as
|
||||||
|
* list_for_each_entry_safe() and allows the iteration to continue independent
|
||||||
|
* of changes to @pos by the body of the loop.
|
||||||
|
*
|
||||||
|
* Note, however, that it cannot handle other modifications that re-order the
|
||||||
|
* rbtree it is iterating over. This includes calling rb_erase() on @pos, as
|
||||||
|
* rb_erase() may rebalance the tree, causing us to miss some nodes.
|
||||||
*/
|
*/
|
||||||
#define rbtree_postorder_for_each_entry_safe(pos, n, root, field) \
|
#define rbtree_postorder_for_each_entry_safe(pos, n, root, field) \
|
||||||
for (pos = rb_entry_safe(rb_first_postorder(root), typeof(*pos), field); \
|
for (pos = rb_entry_safe(rb_first_postorder(root), typeof(*pos), field); \
|
||||||
|
|
Loading…
Reference in a new issue