diff options
| author | Christoph Hellwig <hch@infradead.org> | 2013-11-14 17:32:11 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-14 19:32:22 -0500 |
| commit | b89241e8cdb8321c20546d47645a9b65b58113b5 (patch) | |
| tree | de330bd740b3f7e24f834df48b3db47dc1c75889 | |
| parent | ca5ecd64c2cdbcd316d789467147e732746f39fa (diff) | |
llists: move llist_reverse_order from raid5 to llist.c
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>
| -rw-r--r-- | drivers/md/raid5.c | 14 | ||||
| -rw-r--r-- | include/linux/llist.h | 2 | ||||
| -rw-r--r-- | lib/llist.c | 22 |
3 files changed, 24 insertions, 14 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index f8b906843926..7f0e17a27aeb 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
| @@ -293,20 +293,6 @@ static void __release_stripe(struct r5conf *conf, struct stripe_head *sh) | |||
| 293 | do_release_stripe(conf, sh); | 293 | do_release_stripe(conf, sh); |
| 294 | } | 294 | } |
| 295 | 295 | ||
| 296 | static struct llist_node *llist_reverse_order(struct llist_node *head) | ||
| 297 | { | ||
| 298 | struct llist_node *new_head = NULL; | ||
| 299 | |||
| 300 | while (head) { | ||
| 301 | struct llist_node *tmp = head; | ||
| 302 | head = head->next; | ||
| 303 | tmp->next = new_head; | ||
| 304 | new_head = tmp; | ||
| 305 | } | ||
| 306 | |||
| 307 | return new_head; | ||
| 308 | } | ||
| 309 | |||
| 310 | /* should hold conf->device_lock already */ | 296 | /* should hold conf->device_lock already */ |
| 311 | static int release_stripe_list(struct r5conf *conf) | 297 | static int release_stripe_list(struct r5conf *conf) |
| 312 | { | 298 | { |
diff --git a/include/linux/llist.h b/include/linux/llist.h index 8828a78dec9a..fbf10a0bc095 100644 --- a/include/linux/llist.h +++ b/include/linux/llist.h | |||
| @@ -195,4 +195,6 @@ static inline struct llist_node *llist_del_all(struct llist_head *head) | |||
| 195 | 195 | ||
| 196 | extern struct llist_node *llist_del_first(struct llist_head *head); | 196 | extern struct llist_node *llist_del_first(struct llist_head *head); |
| 197 | 197 | ||
| 198 | struct llist_node *llist_reverse_order(struct llist_node *head); | ||
| 199 | |||
| 198 | #endif /* LLIST_H */ | 200 | #endif /* LLIST_H */ |
diff --git a/lib/llist.c b/lib/llist.c index 4a70d120138c..ef48b87247ec 100644 --- a/lib/llist.c +++ b/lib/llist.c | |||
| @@ -81,3 +81,25 @@ struct llist_node *llist_del_first(struct llist_head *head) | |||
| 81 | return entry; | 81 | return entry; |
| 82 | } | 82 | } |
| 83 | EXPORT_SYMBOL_GPL(llist_del_first); | 83 | EXPORT_SYMBOL_GPL(llist_del_first); |
| 84 | |||
| 85 | /** | ||
| 86 | * llist_reverse_order - reverse order of a llist chain | ||
| 87 | * @head: first item of the list to be reversed | ||
| 88 | * | ||
| 89 | * Reverse the oder of a chain of llist entries and return the | ||
| 90 | * new first entry. | ||
| 91 | */ | ||
| 92 | struct llist_node *llist_reverse_order(struct llist_node *head) | ||
| 93 | { | ||
| 94 | struct llist_node *new_head = NULL; | ||
| 95 | |||
| 96 | while (head) { | ||
| 97 | struct llist_node *tmp = head; | ||
| 98 | head = head->next; | ||
| 99 | tmp->next = new_head; | ||
| 100 | new_head = tmp; | ||
| 101 | } | ||
| 102 | |||
| 103 | return new_head; | ||
| 104 | } | ||
| 105 | EXPORT_SYMBOL_GPL(llist_reverse_order); | ||
