| /* |
| * Copyright (C) 2004 Red Hat UK Ltd. |
| * |
| * This file is released under the GPL. |
| */ |
| |
| #ifndef DM_BIO_LIST_H |
| #define DM_BIO_LIST_H |
| |
| #include <linux/bio.h> |
| |
| struct bio_list { |
| struct bio *head; |
| struct bio *tail; |
| }; |
| |
| static inline void bio_list_init(struct bio_list *bl) |
| { |
| bl->head = bl->tail = NULL; |
| } |
| |
| static inline void bio_list_add(struct bio_list *bl, struct bio *bio) |
| { |
| bio->bi_next = NULL; |
| |
| if (bl->tail) |
| bl->tail->bi_next = bio; |
| else |
| bl->head = bio; |
| |
| bl->tail = bio; |
| } |
| |
| static inline void bio_list_merge(struct bio_list *bl, struct bio_list *bl2) |
| { |
| if (bl->tail) |
| bl->tail->bi_next = bl2->head; |
| else |
| bl->head = bl2->head; |
| |
| bl->tail = bl2->tail; |
| } |
| |
| static inline struct bio *bio_list_pop(struct bio_list *bl) |
| { |
| struct bio *bio = bl->head; |
| |
| if (bio) { |
| bl->head = bl->head->bi_next; |
| if (!bl->head) |
| bl->tail = NULL; |
| |
| bio->bi_next = NULL; |
| } |
| |
| return bio; |
| } |
| |
| static inline struct bio *bio_list_get(struct bio_list *bl) |
| { |
| struct bio *bio = bl->head; |
| |
| bl->head = bl->tail = NULL; |
| |
| return bio; |
| } |
| |
| #endif |