md/raid0: fix restore to sector variable in raid0_make_request (Closes: #786372) (regression in 4.0.2)

svn path=/dists/sid/linux/; revision=22673
This commit is contained in:
Ben Hutchings 2015-05-23 00:30:31 +00:00
parent 96916516d7
commit 695036fbe2
3 changed files with 49 additions and 0 deletions

2
debian/changelog vendored
View File

@ -143,6 +143,8 @@ linux (4.0.4-1) UNRELEASED; urgency=medium
- Change USB_XHCI_HCD to built-in and enable USB_XHCI_PLATFORM as built-in
- Make xhci platform driver use 64 bit or 32 bit DMA
- Add support for ACPI identification to xhci-platform
* md/raid0: fix restore to sector variable in raid0_make_request
(Closes: #786372) (regression in 4.0.2)
-- Ben Hutchings <ben@decadent.org.uk> Mon, 18 May 2015 00:00:06 +0100

View File

@ -0,0 +1,46 @@
From: Eric Work <work.eric@gmail.com>
Date: Mon, 18 May 2015 23:26:23 -0700
Subject: md/raid0: fix restore to sector variable in raid0_make_request
Origin: http://git.neil.brown.name/?p=md.git;a=commitdiff;h=a81157768a00e8cf8a7b43b5ea5cac931262374f
Bug: https://bugzilla.kernel.org/show_bug.cgi?id=98501
Bug-Debian: https://bugs.debian.org/786372
The variable "sector" in "raid0_make_request()" was improperly updated
by a call to "sector_div()" which modifies its first argument in place.
Commit 47d68979cc968535cb87f3e5f2e6a3533ea48fbd restored this variable
after the call for later re-use. Unfortunetly the restore was done after
the referenced variable "bio" was advanced. This lead to the original
value and the restored value being different. Here we move this line to
the proper place.
One observed side effect of this bug was discarding a file though
unlinking would cause an unrelated file's contents to be discarded.
Signed-off-by: NeilBrown <neilb@suse.de>
Fixes: 47d68979cc96 ("md/raid0: fix bug with chunksize not a power of 2.")
Cc: stable@vger.kernel.org (any that received above backport)
URL: https://bugzilla.kernel.org/show_bug.cgi?id=98501
---
drivers/md/raid0.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -517,6 +517,9 @@ static void raid0_make_request(struct md
? (sector & (chunk_sects-1))
: sector_div(sector, chunk_sects));
+ /* Restore due to sector_div */
+ sector = bio->bi_iter.bi_sector;
+
if (sectors < bio_sectors(bio)) {
split = bio_split(bio, sectors, GFP_NOIO, fs_bio_set);
bio_chain(split, bio);
@@ -524,7 +527,6 @@ static void raid0_make_request(struct md
split = bio;
}
- sector = bio->bi_iter.bi_sector;
zone = find_zone(mddev->private, &sector);
tmp_dev = map_sector(mddev, zone, sector, &sector);
split->bi_bdev = tmp_dev->bdev;

View File

@ -70,4 +70,5 @@ bugfix/all/rtc-hctosys-do-not-treat-lack-of-rtc-device-as-error.patch
bugfix/all/rtc-hctosys-use-function-name-in-the-error-log.patch
features/arm64/usb-make-xhci-platform-driver-use-64-bit-or-32-bit-dma.patch
features/arm64/usb-add-support-for-acpi-identification-to-xhci-platform.patch
bugfix/all/md-raid0-fix-restore-to-sector-variable-in-raid0_make_request.patch
usb-add-support-for-acpi-identification-to-xhci-platform.patch