Hi Arun,

On 09.09.25 11:56, Arunpravin Paneer Selvam wrote:
[SNIP]

> +/**
> + * rbtree_for_each_entry_safe - iterate in-order over rb_root safe against 
> removal
> + *
> + * @pos:     the 'type *' to use as a loop cursor
> + * @n:               another 'type *' to use as temporary storage
> + * @root:    'rb_root *' of the rbtree
> + * @member:  the name of the rb_node field within 'type'
> + */
> +#define rbtree_for_each_entry_safe(pos, n, root, member) \
> +     for ((pos) = rb_entry_safe(rb_first(root), typeof(*(pos)), member), \
> +          (n) = (pos) ? rb_entry_safe(rb_next(&(pos)->member), 
> typeof(*(pos)), member) : NULL; \
> +          (pos); \
> +          (pos) = (n), \
> +          (n) = (pos) ? rb_entry_safe(rb_next(&(pos)->member), 
> typeof(*(pos)), member) : NULL)

As far as I know exactly that operation does not work on an R/B tree.

See the _safe() variants of the for_each_ macros are usually used to iterate 
over a container while being able to remove entries.

But because of the potential re-balance storing just the next entry is not 
sufficient for an R/B tree to do that as far as I know.

Please explain how exactly you want to use this macro.

Regards,
Christian.


> +
> +/**
> + * rbtree_reverse_for_each_entry_safe - iterate in reverse in-order over 
> rb_root
> + * safe against removal
> + *
> + * @pos:     the struct type * to use as a loop cursor.
> + * @n:               another struct type * to use as temporary storage.
> + * @root:    pointer to struct rb_root to iterate.
> + * @member:  name of the rb_node field within the struct.
> + */
> +#define rbtree_reverse_for_each_entry_safe(pos, n, root, member) \
> +     for ((pos) = rb_entry_safe(rb_last(root), typeof(*(pos)), member), \
> +          (n) = (pos) ? rb_entry_safe(rb_prev(&(pos)->member), 
> typeof(*(pos)), member) : NULL; \
> +          (pos); \
> +          (pos) = (n), \
> +          (n) = (pos) ? rb_entry_safe(rb_prev(&(pos)->member), 
> typeof(*(pos)), member) : NULL)
> +
>  /**
>   * rbtree_postorder_for_each_entry_safe - iterate in post-order over rb_root 
> of
>   * given type allowing the backing memory of @pos to be invalidated
> 
> base-commit: 7156602d56e5ad689ae11e03680ab6326238b5e3

Reply via email to