| /* | 
 |  * 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 (!bl2->head) | 
 | 		return; | 
 |  | 
 | 	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 |