Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

rbtree: add const qualifier to some functions

The 'rb_first()', 'rb_last()', 'rb_next()' and 'rb_prev()' calls
take a pointer to an RB node or RB root. They do not change the
pointed objects, so add a 'const' qualifier in order to make life
of the users of these functions easier.

Indeed, if I have my own constant pointer &const struct my_type *p,
and I call 'rb_next(&p->rb)', I get a GCC warning:

warning: passing argument 1 of ‘rb_next’ discards qualifiers from pointer target type

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Artem Bityutskiy and committed by
Linus Torvalds
f4b477c4 cfce41a6

+10 -10
+4 -4
include/linux/rbtree.h
··· 140 140 extern void rb_erase(struct rb_node *, struct rb_root *); 141 141 142 142 /* Find logical next and previous nodes in a tree */ 143 - extern struct rb_node *rb_next(struct rb_node *); 144 - extern struct rb_node *rb_prev(struct rb_node *); 145 - extern struct rb_node *rb_first(struct rb_root *); 146 - extern struct rb_node *rb_last(struct rb_root *); 143 + extern struct rb_node *rb_next(const struct rb_node *); 144 + extern struct rb_node *rb_prev(const struct rb_node *); 145 + extern struct rb_node *rb_first(const struct rb_root *); 146 + extern struct rb_node *rb_last(const struct rb_root *); 147 147 148 148 /* Fast replacement of a single node without remove/rebalance/add/rebalance */ 149 149 extern void rb_replace_node(struct rb_node *victim, struct rb_node *new,
+6 -6
lib/rbtree.c
··· 292 292 /* 293 293 * This function returns the first node (in sort order) of the tree. 294 294 */ 295 - struct rb_node *rb_first(struct rb_root *root) 295 + struct rb_node *rb_first(const struct rb_root *root) 296 296 { 297 297 struct rb_node *n; 298 298 ··· 305 305 } 306 306 EXPORT_SYMBOL(rb_first); 307 307 308 - struct rb_node *rb_last(struct rb_root *root) 308 + struct rb_node *rb_last(const struct rb_root *root) 309 309 { 310 310 struct rb_node *n; 311 311 ··· 318 318 } 319 319 EXPORT_SYMBOL(rb_last); 320 320 321 - struct rb_node *rb_next(struct rb_node *node) 321 + struct rb_node *rb_next(const struct rb_node *node) 322 322 { 323 323 struct rb_node *parent; 324 324 ··· 331 331 node = node->rb_right; 332 332 while (node->rb_left) 333 333 node=node->rb_left; 334 - return node; 334 + return (struct rb_node *)node; 335 335 } 336 336 337 337 /* No right-hand children. Everything down and left is ··· 347 347 } 348 348 EXPORT_SYMBOL(rb_next); 349 349 350 - struct rb_node *rb_prev(struct rb_node *node) 350 + struct rb_node *rb_prev(const struct rb_node *node) 351 351 { 352 352 struct rb_node *parent; 353 353 ··· 360 360 node = node->rb_left; 361 361 while (node->rb_right) 362 362 node=node->rb_right; 363 - return node; 363 + return (struct rb_node *)node; 364 364 } 365 365 366 366 /* No left-hand children. Go up till we find an ancestor which