From ee1deda33b0cbb1d2571bf5645b8cf45e6bf50ea Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Fri, 15 Jan 2016 12:41:43 -0500 Subject: [PATCH] Fix block errors on PAE machines (rhbz 1298996) --- ...split-after-potentially-bouncing-a-b.patch | 43 +++++++++++++++++++ kernel.spec | 6 +++ 2 files changed, 49 insertions(+) create mode 100644 block-ensure-to-split-after-potentially-bouncing-a-b.patch diff --git a/block-ensure-to-split-after-potentially-bouncing-a-b.patch b/block-ensure-to-split-after-potentially-bouncing-a-b.patch new file mode 100644 index 000000000..6dda59a4c --- /dev/null +++ b/block-ensure-to-split-after-potentially-bouncing-a-b.patch @@ -0,0 +1,43 @@ +From 23688bf4f830a89866fd0ed3501e342a7360fe4f Mon Sep 17 00:00:00 2001 +From: Junichi Nomura +Date: Tue, 22 Dec 2015 10:23:44 -0700 +Subject: [PATCH] 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: 54efd50bfd87 ("block: make generic_make_request handle arbitrarily sized bios") +Cc: stable@vger.kernel.org +Tested-by: Artem S. Tashkinov +Signed-off-by: Jens Axboe +--- + block/blk-core.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/block/blk-core.c b/block/blk-core.c +index 3636be469fa2..c487b94c59e3 100644 +--- a/block/blk-core.c ++++ b/block/blk-core.c +@@ -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); +-- +2.5.0 + diff --git a/kernel.spec b/kernel.spec index dc3e8a1e4..a802b8e3c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -671,6 +671,9 @@ Patch623: usb-serial-visor-fix-crash-on-detecting-device-witho.patch #rhbz 1298309 Patch624: drm-i915-Do-a-better-job-at-disabling-primary-plane-.patch +#rhbz 1298996 +Patch625: block-ensure-to-split-after-potentially-bouncing-a-b.patch + # END OF PATCH DEFINITIONS %endif @@ -2114,6 +2117,9 @@ fi # # %changelog +* Fri Jan 16 2016 Josh Boyer +- Fix block errors on PAE machines (rhbz 1298996) + * Wed Jan 13 2016 Josh Boyer - 4.3.3-301 - Fix garbled video on some i915 machines (rhbz 1298309)