]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.3-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 May 2012 15:11:49 +0000 (08:11 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 May 2012 15:11:49 +0000 (08:11 -0700)
added patches:
md-raid5-fix-a-bug-about-judging-if-the-operation-is-syncing-or-replacing.patch

queue-3.3/md-raid5-fix-a-bug-about-judging-if-the-operation-is-syncing-or-replacing.patch [new file with mode: 0644]
queue-3.3/series

diff --git a/queue-3.3/md-raid5-fix-a-bug-about-judging-if-the-operation-is-syncing-or-replacing.patch b/queue-3.3/md-raid5-fix-a-bug-about-judging-if-the-operation-is-syncing-or-replacing.patch
new file mode 100644 (file)
index 0000000..0832ec2
--- /dev/null
@@ -0,0 +1,52 @@
+From c6d2e084c7411f61f2b446d94989e5aaf9879b0f Mon Sep 17 00:00:00 2001
+From: majianpeng <majianpeng@gmail.com>
+Date: Mon, 2 Apr 2012 01:16:59 +1000
+Subject: md/raid5: Fix a bug about judging if the operation is syncing or replacing
+
+From: majianpeng <majianpeng@gmail.com>
+
+commit c6d2e084c7411f61f2b446d94989e5aaf9879b0f upstream.
+
+When create a raid5 using assume-clean and echo check or repair to
+sync_action.Then component disks did not operated IO but the raid
+check/resync faster than normal.
+Because the judgement in function analyse_stripe():
+               if (do_recovery ||
+                   sh->sector >= conf->mddev->recovery_cp)
+                       s->syncing = 1;
+               else
+                       s->replacing = 1;
+When check or repair,the recovery_cp == MaxSectore,so syncing equal zero
+not one.
+
+This bug was introduced by commit 9a3e1101b827
+    md/raid5:  detect and handle replacements during recovery.
+so this patch is suitable for 3.3-stable.
+
+Signed-off-by: majianpeng <majianpeng@gmail.com>
+Signed-off-by: NeilBrown <neilb@suse.de>
+Cc: Jes Sorensen <Jes.Sorensen@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/raid5.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -3277,12 +3277,14 @@ static void analyse_stripe(struct stripe
+               /* If there is a failed device being replaced,
+                *     we must be recovering.
+                * else if we are after recovery_cp, we must be syncing
++               * else if MD_RECOVERY_REQUESTED is set, we also are syncing.
+                * else we can only be replacing
+                * sync and recovery both need to read all devices, and so
+                * use the same flag.
+                */
+               if (do_recovery ||
+-                  sh->sector >= conf->mddev->recovery_cp)
++                  sh->sector >= conf->mddev->recovery_cp ||
++                  test_bit(MD_RECOVERY_REQUESTED, &(conf->mddev->recovery)))
+                       s->syncing = 1;
+               else
+                       s->replacing = 1;
index 7e261a644f046e89575f88a691046e4b147b958a..ce12b17a1991f3afa83e35dd943ae1d656b95e1d 100644 (file)
@@ -56,3 +56,4 @@ pm-hibernate-fix-the-number-of-pages-used-for-hibernate-thaw-buffering.patch
 sched-fix-nohz-load-accounting-again.patch
 exit_signal-simplify-the-we-have-changed-execution-domain-logic.patch
 exit_signal-fix-the-parent-has-changed-security-domain-logic.patch
+md-raid5-fix-a-bug-about-judging-if-the-operation-is-syncing-or-replacing.patch