]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/linux/blkdev.h
Introduce rq_for_each_segment replacing rq_for_each_bio
[linux-2.6-omap-h63xx.git] / include / linux / blkdev.h
index b126c6f68e27b2080fe434fe15847a00058048fe..a4b13b8a9d09ac6ddd8fab10e6b68b9a6883b0be 100644 (file)
@@ -637,10 +637,23 @@ static inline void blk_queue_bounce(struct request_queue *q, struct bio **bio)
 }
 #endif /* CONFIG_MMU */
 
-#define rq_for_each_bio(_bio, rq)      \
+struct req_iterator {
+       int i;
+       struct bio *bio;
+};
+
+/* This should not be used directly - use rq_for_each_segment */
+#define __rq_for_each_bio(_bio, rq)    \
        if ((rq->bio))                  \
                for (_bio = (rq)->bio; _bio; _bio = _bio->bi_next)
 
+#define rq_for_each_segment(bvl, _rq, _iter)                   \
+       __rq_for_each_bio(_iter.bio, _rq)                       \
+               bio_for_each_segment(bvl, _iter.bio, _iter.i)
+
+#define rq_iter_last(rq, _iter)                                        \
+               (_iter.bio->bi_next == NULL && _iter.i == _iter.bio->bi_vcnt-1)
+
 extern int blk_register_queue(struct gendisk *disk);
 extern void blk_unregister_queue(struct gendisk *disk);
 extern void register_disk(struct gendisk *dev);