]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 7 Jun 2012 01:33:02 +0000 (10:33 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 7 Jun 2012 01:33:02 +0000 (10:33 +0900)
added patches:
md-raid1-raid10-fix-problem-with-merge_bvec_fn.patch

queue-3.4/md-raid1-raid10-fix-problem-with-merge_bvec_fn.patch [new file with mode: 0644]
queue-3.4/series

diff --git a/queue-3.4/md-raid1-raid10-fix-problem-with-merge_bvec_fn.patch b/queue-3.4/md-raid1-raid10-fix-problem-with-merge_bvec_fn.patch
new file mode 100644 (file)
index 0000000..7e0feb4
--- /dev/null
@@ -0,0 +1,70 @@
+From aba336bd1d46d6b0404b06f6915ed76150739057 Mon Sep 17 00:00:00 2001
+From: NeilBrown <neilb@suse.de>
+Date: Thu, 31 May 2012 15:39:11 +1000
+Subject: md: raid1/raid10: fix problem with merge_bvec_fn
+
+From: NeilBrown <neilb@suse.de>
+
+commit aba336bd1d46d6b0404b06f6915ed76150739057 upstream.
+
+The new merge_bvec_fn which calls the corresponding function
+in subsidiary devices requires that mddev->merge_check_needed
+be set if any child has a merge_bvec_fn.
+
+However were were only setting that when a device was hot-added,
+not when a device was present from the start.
+
+This bug was introduced in 3.4 so patch is suitable for 3.4.y
+kernels.  However that are conflicts in raid10.c so a separate
+patch will be needed for 3.4.y.
+
+Reported-by: Sebastian Riemer <sebastian.riemer@profitbricks.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/raid1.c  |    4 ++++
+ drivers/md/raid10.c |    5 ++++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+--- a/drivers/md/raid1.c
++++ b/drivers/md/raid1.c
+@@ -2548,6 +2548,7 @@ static struct r1conf *setup_conf(struct
+       err = -EINVAL;
+       spin_lock_init(&conf->device_lock);
+       rdev_for_each(rdev, mddev) {
++              struct request_queue *q;
+               int disk_idx = rdev->raid_disk;
+               if (disk_idx >= mddev->raid_disks
+                   || disk_idx < 0)
+@@ -2560,6 +2561,9 @@ static struct r1conf *setup_conf(struct
+               if (disk->rdev)
+                       goto abort;
+               disk->rdev = rdev;
++              q = bdev_get_queue(rdev->bdev);
++              if (q->merge_bvec_fn)
++                      mddev->merge_check_needed = 1;
+               disk->head_position = 0;
+       }
+--- a/drivers/md/raid10.c
++++ b/drivers/md/raid10.c
+@@ -3311,7 +3311,7 @@ static int run(struct mddev *mddev)
+                                (conf->raid_disks / conf->near_copies));
+       rdev_for_each(rdev, mddev) {
+-
++              struct request_queue *q;
+               disk_idx = rdev->raid_disk;
+               if (disk_idx >= conf->raid_disks
+                   || disk_idx < 0)
+@@ -3327,6 +3327,9 @@ static int run(struct mddev *mddev)
+                               goto out_free_conf;
+                       disk->rdev = rdev;
+               }
++              q = bdev_get_queue(rdev->bdev);
++              if (q->merge_bvec_fn)
++                      mddev->merge_check_needed = 1;
+               disk_stack_limits(mddev->gendisk, rdev->bdev,
+                                 rdev->data_offset << 9);
index 2e89cea32d86b51f16be92e57c96d3b32dd035a4..fae321677fef1268b861d02843278f921a25d929 100644 (file)
@@ -75,3 +75,4 @@ iommu-amd-cache-pdev-pointer-to-root-bridge.patch
 iommu-amd-fix-deadlock-in-ppr-handling-error-path.patch
 acpi-battery-only-refresh-the-sysfs-files-when-pertinent-information-changes.patch
 vfs-fix-proc-tid-fdinfo-fd-file-handling.patch
+md-raid1-raid10-fix-problem-with-merge_bvec_fn.patch