diff options
-rw-r--r-- | drivers/md/dm-bio-list.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/md/dm-bio-list.h b/drivers/md/dm-bio-list.h index da4349649f7f..c6be88826fae 100644 --- a/drivers/md/dm-bio-list.h +++ b/drivers/md/dm-bio-list.h | |||
@@ -8,17 +8,43 @@ | |||
8 | #define DM_BIO_LIST_H | 8 | #define DM_BIO_LIST_H |
9 | 9 | ||
10 | #include <linux/bio.h> | 10 | #include <linux/bio.h> |
11 | #include <linux/prefetch.h> | ||
11 | 12 | ||
12 | struct bio_list { | 13 | struct bio_list { |
13 | struct bio *head; | 14 | struct bio *head; |
14 | struct bio *tail; | 15 | struct bio *tail; |
15 | }; | 16 | }; |
16 | 17 | ||
18 | static inline int bio_list_empty(const struct bio_list *bl) | ||
19 | { | ||
20 | return bl->head == NULL; | ||
21 | } | ||
22 | |||
23 | #define BIO_LIST_INIT { .head = NULL, .tail = NULL } | ||
24 | |||
25 | #define BIO_LIST(bl) \ | ||
26 | struct bio_list bl = BIO_LIST_INIT | ||
27 | |||
17 | static inline void bio_list_init(struct bio_list *bl) | 28 | static inline void bio_list_init(struct bio_list *bl) |
18 | { | 29 | { |
19 | bl->head = bl->tail = NULL; | 30 | bl->head = bl->tail = NULL; |
20 | } | 31 | } |
21 | 32 | ||
33 | #define bio_list_for_each(bio, bl) \ | ||
34 | for (bio = (bl)->head; bio && ({ prefetch(bio->bi_next); 1; }); \ | ||
35 | bio = bio->bi_next) | ||
36 | |||
37 | static inline unsigned bio_list_size(const struct bio_list *bl) | ||
38 | { | ||
39 | unsigned sz = 0; | ||
40 | struct bio *bio; | ||
41 | |||
42 | bio_list_for_each(bio, bl) | ||
43 | sz++; | ||
44 | |||
45 | return sz; | ||
46 | } | ||
47 | |||
22 | static inline void bio_list_add(struct bio_list *bl, struct bio *bio) | 48 | static inline void bio_list_add(struct bio_list *bl, struct bio *bio) |
23 | { | 49 | { |
24 | bio->bi_next = NULL; | 50 | bio->bi_next = NULL; |