]> www.infradead.org Git - users/hch/block.git/commitdiff
block: pass bdev and op to blk_next_bio
authorChristoph Hellwig <hch@lst.de>
Sun, 24 Jan 2021 17:06:33 +0000 (18:06 +0100)
committerChristoph Hellwig <hch@lst.de>
Tue, 2 Feb 2021 09:41:11 +0000 (10:41 +0100)
Make blk_next_bio a little more useful by setting up two more common bio
parameters.

Signed-off-by: Christoph Hellwig <hch@lst.de>
block/blk-lib.c
block/blk-zoned.c
block/blk.h

index 752f9c7220622a9b30ac7f6e23aabdf9f7a7e3e4..a7e75167003d8d63f7661732ee37b61f16310164 100644 (file)
 
 #include "blk.h"
 
-struct bio *blk_next_bio(struct bio *bio, unsigned int nr_pages, gfp_t gfp)
+struct bio *blk_next_bio(struct bio *bio, struct block_device *bdev,
+               unsigned int op, unsigned int nr_pages, gfp_t gfp)
 {
        struct bio *new = bio_alloc(gfp, nr_pages);
 
+       bio_set_dev(new, bdev);
+       new->bi_opf = op;
+
        if (bio) {
                bio_chain(bio, new);
                submit_bio(bio);
@@ -94,10 +98,8 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
 
                WARN_ON_ONCE((req_sects << 9) > UINT_MAX);
 
-               bio = blk_next_bio(bio, 0, gfp_mask);
+               bio = blk_next_bio(bio, bdev, op, 0, gfp_mask);
                bio->bi_iter.bi_sector = sector;
-               bio_set_dev(bio, bdev);
-               bio_set_op_attrs(bio, op, 0);
 
                bio->bi_iter.bi_size = req_sects << 9;
                sector += req_sects;
@@ -188,14 +190,12 @@ static int __blkdev_issue_write_same(struct block_device *bdev, sector_t sector,
        max_write_same_sectors = bio_allowed_max_sectors(q);
 
        while (nr_sects) {
-               bio = blk_next_bio(bio, 1, gfp_mask);
+               bio = blk_next_bio(bio, bdev, REQ_OP_WRITE_SAME, 1, gfp_mask);
                bio->bi_iter.bi_sector = sector;
-               bio_set_dev(bio, bdev);
                bio->bi_vcnt = 1;
                bio->bi_io_vec->bv_page = page;
                bio->bi_io_vec->bv_offset = 0;
                bio->bi_io_vec->bv_len = bdev_logical_block_size(bdev);
-               bio_set_op_attrs(bio, REQ_OP_WRITE_SAME, 0);
 
                if (nr_sects > max_write_same_sectors) {
                        bio->bi_iter.bi_size = max_write_same_sectors << 9;
@@ -264,10 +264,8 @@ static int __blkdev_issue_write_zeroes(struct block_device *bdev,
                return -EOPNOTSUPP;
 
        while (nr_sects) {
-               bio = blk_next_bio(bio, 0, gfp_mask);
+               bio = blk_next_bio(bio, bdev, REQ_OP_WRITE_ZEROES, 0, gfp_mask);
                bio->bi_iter.bi_sector = sector;
-               bio_set_dev(bio, bdev);
-               bio->bi_opf = REQ_OP_WRITE_ZEROES;
                if (flags & BLKDEV_ZERO_NOUNMAP)
                        bio->bi_opf |= REQ_NOUNMAP;
 
@@ -315,11 +313,10 @@ static int __blkdev_issue_zero_pages(struct block_device *bdev,
                return -EPERM;
 
        while (nr_sects != 0) {
-               bio = blk_next_bio(bio, __blkdev_sectors_to_bio_pages(nr_sects),
+               bio = blk_next_bio(bio, bdev, REQ_OP_WRITE,
+                                  __blkdev_sectors_to_bio_pages(nr_sects),
                                   gfp_mask);
                bio->bi_iter.bi_sector = sector;
-               bio_set_dev(bio, bdev);
-               bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
 
                while (nr_sects != 0) {
                        sz = min((sector_t) PAGE_SIZE, nr_sects << 9);
index 7a68b6e4300cec97b2624d861b7d7cf97a2f1bb6..98a5d577bf33dcfb5a5e947a8d558864e93b328b 100644 (file)
@@ -231,8 +231,7 @@ int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op,
                return -EINVAL;
 
        while (sector < end_sector) {
-               bio = blk_next_bio(bio, 0, gfp_mask);
-               bio_set_dev(bio, bdev);
+               bio = blk_next_bio(bio, bdev, op | REQ_SYNC, 0, gfp_mask);
 
                /*
                 * Special case for the zone reset operation that reset all
@@ -244,7 +243,6 @@ int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op,
                        break;
                }
 
-               bio->bi_opf = op | REQ_SYNC;
                bio->bi_iter.bi_sector = sector;
                sector += zone_sectors;
 
index 0198335c58388108f5b776e6d3a0646df0ffc5fb..9b17a6ccaf3dc08183f47d2ae0109c89f8c94fa1 100644 (file)
@@ -329,7 +329,8 @@ extern int blk_iolatency_init(struct request_queue *q);
 static inline int blk_iolatency_init(struct request_queue *q) { return 0; }
 #endif
 
-struct bio *blk_next_bio(struct bio *bio, unsigned int nr_pages, gfp_t gfp);
+struct bio *blk_next_bio(struct bio *bio, struct block_device *bdev,
+               unsigned int op, unsigned int nr_pages, gfp_t gfp);
 
 #ifdef CONFIG_BLK_DEV_ZONED
 void blk_queue_free_zone_bitmaps(struct request_queue *q);