Commit fbe7c2ef authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

nilfs2: pass the operation to bio_alloc



Refactor the segbuf write code to pass the op to bio_alloc instead of
setting it just before the submission.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
Link: https://lore.kernel.org/r/20220222154634.597067-4-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 4c4dad11
Loading
Loading
Loading
Loading
+9 −11
Original line number Diff line number Diff line
@@ -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: