diff options
author | NeilBrown <neilb@suse.com> | 2017-06-18 14:38:58 +1000 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2017-06-18 12:40:59 -0600 |
commit | a8821f3f32bea173c7f9546b3b025898f0e09f58 (patch) | |
tree | d911354d3c07a5663256d5684d87f8d27435bdb6 /drivers/block/cciss_scsi.h | |
parent | 93b27e72904a9869e648c870bf0d04b124fda1c7 (diff) | |
download | linux-a8821f3f32bea173c7f9546b3b025898f0e09f58.tar.gz linux-a8821f3f32bea173c7f9546b3b025898f0e09f58.tar.bz2 linux-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/cciss_scsi.h')
0 files changed, 0 insertions, 0 deletions