list: introduce list_for_each_entry_from_reverse helper
authorJiri Pirko <jiri@mellanox.com>
Fri, 3 Feb 2017 09:29:05 +0000 (10:29 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 3 Feb 2017 21:35:42 +0000 (16:35 -0500)
Similar to list_for_each_entry_continue and its reverse variant
list_for_each_entry_continue_reverse, introduce reverse helper for
list_for_each_entry_from.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Acked-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/list.h

index d1039ecaf94fdbea21a25c0fa4a5ea351683dd91..ae537fa462160efff72574107dd34a8b1e29375c 100644 (file)
@@ -526,6 +526,19 @@ static inline void list_splice_tail_init(struct list_head *list,
        for (; &pos->member != (head);                                  \
             pos = list_next_entry(pos, member))
 
+/**
+ * list_for_each_entry_from_reverse - iterate backwards over list of given type
+ *                                    from the current point
+ * @pos:       the type * to use as a loop cursor.
+ * @head:      the head for your list.
+ * @member:    the name of the list_head within the struct.
+ *
+ * Iterate backwards over list of given type, continuing from current position.
+ */
+#define list_for_each_entry_from_reverse(pos, head, member)            \
+       for (; &pos->member != (head);                                  \
+            pos = list_prev_entry(pos, member))
+
 /**
  * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
  * @pos:       the type * to use as a loop cursor.