Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23688bf4 authored by Junichi Nomura's avatar Junichi Nomura Committed by Jens Axboe
Browse files

block: ensure to split after potentially bouncing a bio



blk_queue_bio() does split then bounce, which makes the segment
counting based on pages before bouncing and could go wrong. Move
the split to after bouncing, like we do for blk-mq, and the we
fix the issue of having the bio count for segments be wrong.

Fixes: 54efd50b ("block: make generic_make_request handle arbitrarily sized bios")
Cc: stable@vger.kernel.org
Tested-by: default avatarArtem S. Tashkinov <t.artem@lycos.com>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent b5875222
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1689,8 +1689,6 @@ static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio)
	struct request *req;
	unsigned int request_count = 0;

	blk_queue_split(q, &bio, q->bio_split);

	/*
	 * low level driver can indicate that it wants pages above a
	 * certain limit bounced to low memory (ie for highmem, or even
@@ -1698,6 +1696,8 @@ static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio)
	 */
	blk_queue_bounce(q, &bio);

	blk_queue_split(q, &bio, q->bio_split);

	if (bio_integrity_enabled(bio) && bio_integrity_prep(bio)) {
		bio->bi_error = -EIO;
		bio_endio(bio);