aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2017-06-18 14:38:58 +1000
committerJens Axboe <axboe@kernel.dk>2017-06-18 12:40:59 -0600
commita8821f3f32bea173c7f9546b3b025898f0e09f58 (patch)
treed911354d3c07a5663256d5684d87f8d27435bdb6 /drivers/block
parentblk: use non-rescuing bioset for q->bio_split. (diff)
downloadlinux-dev-a8821f3f32bea173c7f9546b3b025898f0e09f58.tar.xz
linux-dev-a8821f3f32bea173c7f9546b3b025898f0e09f58.zip
block: Improvements to bounce-buffer handling
Since commit 23688bf4f830 ("block: ensure to split after potentially bouncing a bio") blk_queue_bounce() is called *before* blk_queue_split(). This means that: 1/ the comments blk_queue_split() about bounce buffers are irrelevant, and 2/ a very large bio (more than BIO_MAX_PAGES) will no longer be split before it arrives at blk_queue_bounce(), leading to the possibility that bio_clone_bioset() will fail and a NULL will be dereferenced. Separately, blk_queue_bounce() shouldn't use fs_bio_set as the bio being copied could be from the same set, and this could lead to a deadlock. So: - allocate 2 private biosets for blk_queue_bounce, one for splitting enormous bios and one for cloning bios. - add code to split a bio that exceeds BIO_MAX_PAGES. - Fix up the comments in blk_queue_split() Credit-to: Ming Lei <tom.leiming@gmail.com> (suggested using single bio_for_each_segment loop) Reviewed-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/block')
0 files changed, 0 insertions, 0 deletions