On Tue, Feb 23, 2021 at 03:51:23AM +0000, Chaitanya Kulkarni wrote: > Looking at the other call sites do we need something like following ? > Since __blk_queue_bounce() passes the NULL for the passthru case as a > bio_set value ? Well, that is a somewhat odd calling convention. What about the patch below instead? That being we really need to kill this bouncing code off.. diff --git a/block/bounce.c b/block/bounce.c index fc55314aa4269a..789fbcacb1e92a 100644 --- a/block/bounce.c +++ b/block/bounce.c @@ -214,9 +214,9 @@ static void bounce_end_io_read_isa(struct bio *bio) __bounce_end_io_read(bio, &isa_page_pool); } -static struct bio *bounce_clone_bio(struct bio *bio_src, gfp_t gfp_mask, - struct bio_set *bs) +static struct bio *bounce_clone_bio(struct bio *bio_src, bool passthrough) { + unsigned int nr_vecs = bio_segments(bio_src); struct bvec_iter iter; struct bio_vec bv; struct bio *bio; @@ -242,8 +242,10 @@ static struct bio *bounce_clone_bio(struct bio *bio_src, gfp_t gfp_mask, * asking for trouble and would force extra work on * __bio_clone_fast() anyways. */ - - bio = bio_alloc_bioset(gfp_mask, bio_segments(bio_src), bs); + if (passthrough) + bio = bio_kmalloc(GFP_NOIO, nr_vecs); + else + bio = bio_alloc_bioset(GFP_NOIO, nr_vecs, &bounce_bio_set); if (!bio) return NULL; bio->bi_bdev = bio_src->bi_bdev; @@ -269,11 +271,11 @@ static struct bio *bounce_clone_bio(struct bio *bio_src, gfp_t gfp_mask, break; } - if (bio_crypt_clone(bio, bio_src, gfp_mask) < 0) + if (bio_crypt_clone(bio, bio_src, GFP_NOIO) < 0) goto err_put; if (bio_integrity(bio_src) && - bio_integrity_clone(bio, bio_src, gfp_mask) < 0) + bio_integrity_clone(bio, bio_src, GFP_NOIO) < 0) goto err_put; bio_clone_blkg_association(bio, bio_src); @@ -313,8 +315,7 @@ static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig, submit_bio_noacct(*bio_orig); *bio_orig = bio; } - bio = bounce_clone_bio(*bio_orig, GFP_NOIO, passthrough ? NULL : - &bounce_bio_set); + bio = bounce_clone_bio(*bio_orig, passthrough); /* * Bvec table can't be updated by bio_for_each_segment_all(),