Skip to content

Commit

Permalink
llists: move llist_reverse_order from raid5 to llist.c
Browse files Browse the repository at this point in the history
Make this useful helper available for other users.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Christoph Hellwig authored and Linus Torvalds committed Nov 15, 2013
1 parent ca5ecd6 commit b89241e
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 14 deletions.
14 changes: 0 additions & 14 deletions drivers/md/raid5.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,20 +293,6 @@ static void __release_stripe(struct r5conf *conf, struct stripe_head *sh)
do_release_stripe(conf, sh);
}

static struct llist_node *llist_reverse_order(struct llist_node *head)
{
struct llist_node *new_head = NULL;

while (head) {
struct llist_node *tmp = head;
head = head->next;
tmp->next = new_head;
new_head = tmp;
}

return new_head;
}

/* should hold conf->device_lock already */
static int release_stripe_list(struct r5conf *conf)
{
Expand Down
2 changes: 2 additions & 0 deletions include/linux/llist.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,4 +195,6 @@ static inline struct llist_node *llist_del_all(struct llist_head *head)

extern struct llist_node *llist_del_first(struct llist_head *head);

struct llist_node *llist_reverse_order(struct llist_node *head);

#endif /* LLIST_H */
22 changes: 22 additions & 0 deletions lib/llist.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,25 @@ struct llist_node *llist_del_first(struct llist_head *head)
return entry;
}
EXPORT_SYMBOL_GPL(llist_del_first);

/**
* llist_reverse_order - reverse order of a llist chain
* @head: first item of the list to be reversed
*
* Reverse the oder of a chain of llist entries and return the
* new first entry.
*/
struct llist_node *llist_reverse_order(struct llist_node *head)
{
struct llist_node *new_head = NULL;

while (head) {
struct llist_node *tmp = head;
head = head->next;
tmp->next = new_head;
new_head = tmp;
}

return new_head;
}
EXPORT_SYMBOL_GPL(llist_reverse_order);

0 comments on commit b89241e

Please sign in to comment.