From: Greg Kroah-Hartman Date: Thu, 15 Dec 2011 00:03:11 +0000 (-0800) Subject: 3.0 patches X-Git-Tag: v3.0.14~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7f814ef7917f1a1615e800e5e77d1e894e3d1235;p=thirdparty%2Fkernel%2Fstable-queue.git 3.0 patches added patches: md-raid5-fix-bug-that-could-result-in-reads-from-a-failed-device.patch --- diff --git a/queue-3.0/md-raid5-fix-bug-that-could-result-in-reads-from-a-failed-device.patch b/queue-3.0/md-raid5-fix-bug-that-could-result-in-reads-from-a-failed-device.patch new file mode 100644 index 00000000000..2fe4684b74e --- /dev/null +++ b/queue-3.0/md-raid5-fix-bug-that-could-result-in-reads-from-a-failed-device.patch @@ -0,0 +1,49 @@ +From neilb@suse.de Wed Dec 14 16:01:18 2011 +From: NeilBrown +Date: Thu, 15 Dec 2011 10:54:39 +1100 +Subject: md/raid5: fix bug that could result in reads from a failed device. +To: stable@vger.kernel.org +Cc: linux RAID , Alexander Lyakas , tim.gardner@canonical.com +Message-ID: <20111215105439.628fe074@notabene.brown> + + +From: NeilBrown + +commit 355840e7a7e56bb2834fd3b0da64da5465f8aeaa upstream. + +commit a847627709b3402163d99f7c6fda4a77bcd6b51b in linux-3.0.9 +attempted to backport this to 3.0 but only made one change were two +were necessary. This add the second change. + +This bug was introduced in 415e72d034c50520ddb7ff79e7d1792c1306f0c9 +which was in 2.6.36. + +There is a small window of time between when a device fails and when +it is removed from the array. During this time we might still read +from it, but we won't write to it - so it is possible that we could +read stale data. + +We didn't need the test of 'Faulty' before because the test on +In_sync is sufficient. Since we started allowing reads from the early +part of non-In_sync devices we need a test on Faulty too. + +This is suitable for any kernel from 2.6.36 onwards, though the patch +might need a bit of tweaking in 3.0 and earlier. + +Signed-off-by: NeilBrown +Signed-off-by: Greg Kroah-Hartman +--- + drivers/md/raid5.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/md/raid5.c ++++ b/drivers/md/raid5.c +@@ -3078,7 +3078,7 @@ static void handle_stripe5(struct stripe + /* Not in-sync */; + else if (test_bit(In_sync, &rdev->flags)) + set_bit(R5_Insync, &dev->flags); +- else { ++ else if (!test_bit(Faulty, &rdev->flags)) { + /* could be in-sync depending on recovery/reshape status */ + if (sh->sector + STRIPE_SECTORS <= rdev->recovery_offset) + set_bit(R5_Insync, &dev->flags); diff --git a/queue-3.0/series b/queue-3.0/series index 7e39bc1ae2e..8e34a48adfe 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -30,3 +30,4 @@ hfs-fix-hfs_find_init-sb-ext_tree-null-ptr-oops.patch hwmon-coretemp-fix-oops-on-cpu-offlining.patch xfs-fix-nfs-export-of-64-bit-inodes-numbers-on-32-bit-kernels.patch xfs-avoid-synchronous-transactions-when-deleting-attr-blocks.patch +md-raid5-fix-bug-that-could-result-in-reads-from-a-failed-device.patch