bcache: avoid to use bio_for_each_segment_all() in bch_bio_alloc_pages()
authorMing Lei <[email protected]>
Fri, 15 Feb 2019 11:13:18 +0000 (19:13 +0800)
committerJens Axboe <[email protected]>
Fri, 15 Feb 2019 15:40:11 +0000 (08:40 -0700)
bch_bio_alloc_pages() is always called on one new bio, so it is safe
to access the bvec table directly. Given it is the only kind of this
case, open code the bvec table access since bio_for_each_segment_all()
will be changed to support for iterating over multipage bvec.

Acked-by: Coly Li <[email protected]>
Reviewed-by: Omar Sandoval <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
Signed-off-by: Ming Lei <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
drivers/md/bcache/util.c

index 20eddeac1531a93d4a2bd3077b4645e600e342b1..62fb917f7a4f08231656b1abb6fa18594012f7ff 100644 (file)
@@ -270,7 +270,11 @@ int bch_bio_alloc_pages(struct bio *bio, gfp_t gfp_mask)
        int i;
        struct bio_vec *bv;
 
-       bio_for_each_segment_all(bv, bio, i) {
+       /*
+        * This is called on freshly new bio, so it is safe to access the
+        * bvec table directly.
+        */
+       for (i = 0, bv = bio->bi_io_vec; i < bio->bi_vcnt; bv++, i++) {
                bv->bv_page = alloc_page(gfp_mask);
                if (!bv->bv_page) {
                        while (--bv >= bio->bi_io_vec)