OSDN Git Service

nilfs2: pass the operation to bio_alloc
authorChristoph Hellwig <hch@lst.de>
Tue, 22 Feb 2022 15:46:34 +0000 (16:46 +0100)
committerJens Axboe <axboe@kernel.dk>
Sun, 27 Feb 2022 21:50:07 +0000 (14:50 -0700)
Refactor the segbuf write code to pass the op to bio_alloc instead of
setting it just before the submission.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Link: https://lore.kernel.org/r/20220222154634.597067-4-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/nilfs2/segbuf.c

index 4f71faa..a3bb0c8 100644 (file)
@@ -337,8 +337,7 @@ static void nilfs_end_bio_write(struct bio *bio)
 }
 
 static int nilfs_segbuf_submit_bio(struct nilfs_segment_buffer *segbuf,
-                                  struct nilfs_write_info *wi, int mode,
-                                  int mode_flags)
+                                  struct nilfs_write_info *wi)
 {
        struct bio *bio = wi->bio;
        int err;
@@ -356,7 +355,6 @@ static int nilfs_segbuf_submit_bio(struct nilfs_segment_buffer *segbuf,
 
        bio->bi_end_io = nilfs_end_bio_write;
        bio->bi_private = segbuf;
-       bio_set_op_attrs(bio, mode, mode_flags);
        submit_bio(bio);
        segbuf->sb_nbio++;
 
@@ -384,15 +382,15 @@ static void nilfs_segbuf_prepare_write(struct nilfs_segment_buffer *segbuf,
 
 static int nilfs_segbuf_submit_bh(struct nilfs_segment_buffer *segbuf,
                                  struct nilfs_write_info *wi,
-                                 struct buffer_head *bh, int mode)
+                                 struct buffer_head *bh)
 {
        int len, err;
 
        BUG_ON(wi->nr_vecs <= 0);
  repeat:
        if (!wi->bio) {
-               wi->bio = bio_alloc(wi->nilfs->ns_bdev, wi->nr_vecs, 0,
-                                   GFP_NOIO);
+               wi->bio = bio_alloc(wi->nilfs->ns_bdev, wi->nr_vecs,
+                                   REQ_OP_WRITE, GFP_NOIO);
                wi->bio->bi_iter.bi_sector = (wi->blocknr + wi->end) <<
                        (wi->nilfs->ns_blocksize_bits - 9);
        }
@@ -403,7 +401,7 @@ static int nilfs_segbuf_submit_bh(struct nilfs_segment_buffer *segbuf,
                return 0;
        }
        /* bio is FULL */
-       err = nilfs_segbuf_submit_bio(segbuf, wi, mode, 0);
+       err = nilfs_segbuf_submit_bio(segbuf, wi);
        /* never submit current bh */
        if (likely(!err))
                goto repeat;
@@ -433,13 +431,13 @@ static int nilfs_segbuf_write(struct nilfs_segment_buffer *segbuf,
        nilfs_segbuf_prepare_write(segbuf, &wi);
 
        list_for_each_entry(bh, &segbuf->sb_segsum_buffers, b_assoc_buffers) {
-               res = nilfs_segbuf_submit_bh(segbuf, &wi, bh, REQ_OP_WRITE);
+               res = nilfs_segbuf_submit_bh(segbuf, &wi, bh);
                if (unlikely(res))
                        goto failed_bio;
        }
 
        list_for_each_entry(bh, &segbuf->sb_payload_buffers, b_assoc_buffers) {
-               res = nilfs_segbuf_submit_bh(segbuf, &wi, bh, REQ_OP_WRITE);
+               res = nilfs_segbuf_submit_bh(segbuf, &wi, bh);
                if (unlikely(res))
                        goto failed_bio;
        }
@@ -449,8 +447,8 @@ static int nilfs_segbuf_write(struct nilfs_segment_buffer *segbuf,
                 * Last BIO is always sent through the following
                 * submission.
                 */
-               res = nilfs_segbuf_submit_bio(segbuf, &wi, REQ_OP_WRITE,
-                                             REQ_SYNC);
+               wi.bio->bi_opf |= REQ_SYNC;
+               res = nilfs_segbuf_submit_bio(segbuf, &wi);
        }
 
  failed_bio: