diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-01-28 19:33:37 -0500 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-01-28 19:33:37 -0500 |
| commit | dfd0436ad0ce139467b124c646fa65ee2635e14a (patch) | |
| tree | abf9d83c704417cdd484243c12aeffee6b185aba /include/linux/rbtree_augmented.h | |
| parent | b9818c3312da66f4b83a4a2e8650628be1237cb5 (diff) | |
| parent | 689dfa894c57842a05bf6dc9f97e6bb71ec5f386 (diff) | |
Merge branch 'merge' into next
Merge "merge" branch to bring in various bug fixes that are
going into 3.8
Diffstat (limited to 'include/linux/rbtree_augmented.h')
| -rw-r--r-- | include/linux/rbtree_augmented.h | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/include/linux/rbtree_augmented.h b/include/linux/rbtree_augmented.h index 2ac60c9cf644..fea49b5da12a 100644 --- a/include/linux/rbtree_augmented.h +++ b/include/linux/rbtree_augmented.h | |||
| @@ -123,9 +123,9 @@ __rb_change_child(struct rb_node *old, struct rb_node *new, | |||
| 123 | extern void __rb_erase_color(struct rb_node *parent, struct rb_root *root, | 123 | extern void __rb_erase_color(struct rb_node *parent, struct rb_root *root, |
| 124 | void (*augment_rotate)(struct rb_node *old, struct rb_node *new)); | 124 | void (*augment_rotate)(struct rb_node *old, struct rb_node *new)); |
| 125 | 125 | ||
| 126 | static __always_inline void | 126 | static __always_inline struct rb_node * |
| 127 | rb_erase_augmented(struct rb_node *node, struct rb_root *root, | 127 | __rb_erase_augmented(struct rb_node *node, struct rb_root *root, |
| 128 | const struct rb_augment_callbacks *augment) | 128 | const struct rb_augment_callbacks *augment) |
| 129 | { | 129 | { |
| 130 | struct rb_node *child = node->rb_right, *tmp = node->rb_left; | 130 | struct rb_node *child = node->rb_right, *tmp = node->rb_left; |
| 131 | struct rb_node *parent, *rebalance; | 131 | struct rb_node *parent, *rebalance; |
| @@ -217,6 +217,14 @@ rb_erase_augmented(struct rb_node *node, struct rb_root *root, | |||
| 217 | } | 217 | } |
| 218 | 218 | ||
| 219 | augment->propagate(tmp, NULL); | 219 | augment->propagate(tmp, NULL); |
| 220 | return rebalance; | ||
| 221 | } | ||
| 222 | |||
| 223 | static __always_inline void | ||
| 224 | rb_erase_augmented(struct rb_node *node, struct rb_root *root, | ||
| 225 | const struct rb_augment_callbacks *augment) | ||
| 226 | { | ||
| 227 | struct rb_node *rebalance = __rb_erase_augmented(node, root, augment); | ||
| 220 | if (rebalance) | 228 | if (rebalance) |
| 221 | __rb_erase_color(rebalance, root, augment->rotate); | 229 | __rb_erase_color(rebalance, root, augment->rotate); |
| 222 | } | 230 | } |
