aboutsummaryrefslogtreecommitdiffstats
path: root/block/bio.c
diff options
context:
space:
mode:
authorMing Lei <ming.lei@redhat.com>2021-01-11 11:05:55 +0800
committerJens Axboe <axboe@kernel.dk>2021-01-24 21:22:45 -0700
commitbaa2c7c97153b8064dbeeb99f2f72de3a75c90a7 (patch)
treed079f69cab689d9fdb48484d8afca20ae7fb88b3 /block/bio.c
parentblock: don't allocate inline bvecs if this bioset needn't bvecs (diff)
downloadlinux-dev-baa2c7c97153b8064dbeeb99f2f72de3a75c90a7.tar.xz
linux-dev-baa2c7c97153b8064dbeeb99f2f72de3a75c90a7.zip
block: set .bi_max_vecs as actual allocated vector number
bvec_alloc() may allocate more bio vectors than requested, so set .bi_max_vecs as actual allocated vector number, instead of the requested number. This way can help fs build bigger bio because new bio often won't be allocated until the current one becomes full. Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Pavel Begunkov <asml.silence@gmail.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/bio.c')
-rw-r--r--block/bio.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/block/bio.c b/block/bio.c
index 8ccda51dd831..56a06f94fb63 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -505,12 +505,13 @@ struct bio *bio_alloc_bioset(gfp_t gfp_mask, unsigned int nr_iovecs,
goto err_free;
bio->bi_flags |= idx << BVEC_POOL_OFFSET;
+ bio->bi_max_vecs = bvec_nr_vecs(idx);
} else if (nr_iovecs) {
bvl = bio->bi_inline_vecs;
+ bio->bi_max_vecs = inline_vecs;
}
bio->bi_pool = bs;
- bio->bi_max_vecs = nr_iovecs;
bio->bi_io_vec = bvl;
return bio;