Hi, I found some bio_list functions in dm-raid1.c and I thought they could be made available for other users too. There's probably a better place for this. --- linux.orig/drivers/md/dm-bio-list.h 1970-01-01 01:00:00.000000000 +0100 +++ linux/drivers/md/dm-bio-list.h 2004-01-10 20:43:32.442353960 +0100 @@ -0,0 +1,70 @@ +/* + * bio queue functions + * + * Copyright (C) 2001, 2002 Sistina Software + * + * This file is released under the LGPL. + */ + +#ifndef DM_BIO_LIST_H +#define DM_BIO_LIST_H + +#include <linux/bio.h> + +struct bio_list { + struct bio *head; + struct bio *tail; +}; + +extern inline void bio_list_init(struct bio_list *bl) +{ + bl->head = bl->tail = NULL; +} + +extern 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; +} + +extern 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; +} + +extern 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; +} + +extern inline struct bio *bio_list_get(struct bio_list *bl) +{ + struct bio *bio = bl->head; + + bl->head = bl->tail = NULL; + + return bio; +} + +#endif