Add patch to fix discard on md RAID0 (rhbz 1223332)

This commit is contained in:
Josh Boyer 2015-05-21 08:37:14 -04:00
parent 9a7362524d
commit 621c196a5c
2 changed files with 55 additions and 0 deletions

View File

@ -669,6 +669,9 @@ Patch26204: 0001-cx18-add-missing-caps-for-the-PCM-video-device.patch
#rhbz 1218688
Patch26205: drm-i915-Fix-ilk-watermarks-calculation-when-primary.patch
#rhbz 1223332
Patch26207: md-raid0-fix-restore-to-sector-variable-in-raid0_mak.patch
# END OF PATCH DEFINITIONS
%endif
@ -1441,6 +1444,9 @@ ApplyPatch 0001-cx18-add-missing-caps-for-the-PCM-video-device.patch
#rhbz 1218688
ApplyPatch drm-i915-Fix-ilk-watermarks-calculation-when-primary.patch
#rhbz 1223332
ApplyPatch md-raid0-fix-restore-to-sector-variable-in-raid0_mak.patch
# END OF PATCH APPLICATIONS
%endif
@ -2301,6 +2307,7 @@ fi
# || ||
%changelog
* Thu May 21 2015 Josh Boyer <jwboyer@fedoraproject.org>
- Add patch to fix discard on md RAID0 (rhbz 1223332)
- Add submitted stable fix for i915 flickering on ilk (rhbz 1218688)
* Mon May 18 2015 Laura Abbott <labbott@fedoraproject.org>

View File

@ -0,0 +1,48 @@
From: Eric Work <work.eric@gmail.com>
Date: Tue, 19 May 2015 06:26:23 -0700
Subject: [PATCH] md/raid0: fix restore to sector variable in
raid0_make_request
md/raid0: fix restore to sector variable in raid0_make_request
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(-)
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index 3b5d7f704aa3..903391ce9353 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -517,6 +517,9 @@ static void raid0_make_request(struct mddev *mddev, struct bio *bio)
? (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 mddev *mddev, struct bio *bio)
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;