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

block: pass a block_device and opf to bio_reset



Pass the block_device that we plan to use this bio for and the
operation to bio_reset to optimize the assigment.  A NULL block_device
can be passed, both for the passthrough case on a raw request_queue and
to temporarily avoid refactoring some nasty code.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
Link: https://lore.kernel.org/r/20220124091107.642561-20-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 49add496
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -295,6 +295,8 @@ EXPORT_SYMBOL(bio_init);
/**
 * bio_reset - reinitialize a bio
 * @bio:	bio to reset
 * @bdev:	block device to use the bio for
 * @opf:	operation and flags for bio
 *
 * Description:
 *   After calling bio_reset(), @bio will be in the same state as a freshly
@@ -302,11 +304,13 @@ EXPORT_SYMBOL(bio_init);
 *   preserved are the ones that are initialized by bio_alloc_bioset(). See
 *   comment in struct bio.
 */
void bio_reset(struct bio *bio)
void bio_reset(struct bio *bio, struct block_device *bdev, unsigned int opf)
{
	bio_uninit(bio);
	memset(bio, 0, BIO_RESET_BYTES);
	atomic_set(&bio->__bi_remaining, 1);
	bio->bi_bdev = bdev;
	bio->bi_opf = opf;
}
EXPORT_SYMBOL(bio_reset);

+2 −6
Original line number Diff line number Diff line
@@ -1020,9 +1020,8 @@ static void pkt_gather_data(struct pktcdvd_device *pd, struct packet_data *pkt)
			continue;

		bio = pkt->r_bios[f];
		bio_reset(bio);
		bio_reset(bio, pd->bdev, REQ_OP_READ);
		bio->bi_iter.bi_sector = pkt->sector + f * (CD_FRAMESIZE >> 9);
		bio_set_dev(bio, pd->bdev);
		bio->bi_end_io = pkt_end_io_read;
		bio->bi_private = pkt;

@@ -1034,7 +1033,6 @@ static void pkt_gather_data(struct pktcdvd_device *pd, struct packet_data *pkt)
			BUG();

		atomic_inc(&pkt->io_wait);
		bio_set_op_attrs(bio, REQ_OP_READ, 0);
		pkt_queue_bio(pd, bio);
		frames_read++;
	}
@@ -1235,9 +1233,8 @@ static void pkt_start_write(struct pktcdvd_device *pd, struct packet_data *pkt)
{
	int f;

	bio_reset(pkt->w_bio);
	bio_reset(pkt->w_bio, pd->bdev, REQ_OP_WRITE);
	pkt->w_bio->bi_iter.bi_sector = pkt->sector;
	bio_set_dev(pkt->w_bio, pd->bdev);
	pkt->w_bio->bi_end_io = pkt_end_io_packet_write;
	pkt->w_bio->bi_private = pkt;

@@ -1270,7 +1267,6 @@ static void pkt_start_write(struct pktcdvd_device *pd, struct packet_data *pkt)

	/* Start the write request */
	atomic_set(&pkt->io_wait, 1);
	bio_set_op_attrs(pkt->w_bio, REQ_OP_WRITE, 0);
	pkt_queue_bio(pd, pkt->w_bio);
}

+4 −8
Original line number Diff line number Diff line
@@ -53,14 +53,12 @@ static int journal_read_bucket(struct cache *ca, struct list_head *list,
reread:		left = ca->sb.bucket_size - offset;
		len = min_t(unsigned int, left, PAGE_SECTORS << JSET_BITS);

		bio_reset(bio);
		bio_reset(bio, ca->bdev, REQ_OP_READ);
		bio->bi_iter.bi_sector	= bucket + offset;
		bio_set_dev(bio, ca->bdev);
		bio->bi_iter.bi_size	= len << 9;

		bio->bi_end_io	= journal_read_endio;
		bio->bi_private = &cl;
		bio_set_op_attrs(bio, REQ_OP_READ, 0);
		bch_bio_map(bio, data);

		closure_bio_submit(ca->set, bio, &cl);
@@ -771,16 +769,14 @@ static void journal_write_unlocked(struct closure *cl)

		atomic_long_add(sectors, &ca->meta_sectors_written);

		bio_reset(bio);
		bio_reset(bio, ca->bdev, REQ_OP_WRITE | 
			  REQ_SYNC | REQ_META | REQ_PREFLUSH | REQ_FUA);
		bch_bio_map(bio, w->data);
		bio->bi_iter.bi_sector	= PTR_OFFSET(k, i);
		bio_set_dev(bio, ca->bdev);
		bio->bi_iter.bi_size = sectors << 9;

		bio->bi_end_io	= journal_write_endio;
		bio->bi_private = w;
		bio_set_op_attrs(bio, REQ_OP_WRITE,
				 REQ_SYNC|REQ_META|REQ_PREFLUSH|REQ_FUA);
		bch_bio_map(bio, w->data);

		trace_bcache_journal_write(bio, w->data->keys);
		bio_list_add(&list, bio);
+2 −2
Original line number Diff line number Diff line
@@ -831,11 +831,11 @@ static void cached_dev_read_done(struct closure *cl)
	 */

	if (s->iop.bio) {
		bio_reset(s->iop.bio);
		bio_reset(s->iop.bio, s->cache_miss->bi_bdev, REQ_OP_READ);
		s->iop.bio->bi_iter.bi_sector =
			s->cache_miss->bi_iter.bi_sector;
		bio_copy_dev(s->iop.bio, s->cache_miss);
		s->iop.bio->bi_iter.bi_size = s->insert_bio_sectors << 9;
		bio_clone_blkg_association(s->iop.bio, s->cache_miss);
		bch_bio_map(s->iop.bio, NULL);

		bio_copy_data(s->cache_miss, s->iop.bio);
+2 −3
Original line number Diff line number Diff line
@@ -2166,11 +2166,10 @@ static void process_checks(struct r1bio *r1_bio)
			continue;
		/* fixup the bio for reuse, but preserve errno */
		status = b->bi_status;
		bio_reset(b);
		bio_reset(b, conf->mirrors[i].rdev->bdev, REQ_OP_READ);
		b->bi_status = status;
		b->bi_iter.bi_sector = r1_bio->sector +
			conf->mirrors[i].rdev->data_offset;
		bio_set_dev(b, conf->mirrors[i].rdev->bdev);
		b->bi_end_io = end_sync_read;
		rp->raid_bio = r1_bio;
		b->bi_private = rp;
@@ -2651,7 +2650,7 @@ static struct r1bio *raid1_alloc_init_r1buf(struct r1conf *conf)
	for (i = conf->poolinfo->raid_disks; i--; ) {
		bio = r1bio->bios[i];
		rps = bio->bi_private;
		bio_reset(bio);
		bio_reset(bio, NULL, 0);
		bio->bi_private = rps;
	}
	r1bio->master_bio = NULL;
Loading