summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2007-01-26 00:57:02 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-01-26 13:50:59 -0800
commit1031be7a5fafd3a858dfaabb74d98f9ca20744a8 (patch)
treeb111bc6880571e3ad0720da828a029ecae066c8a
parent3eda22d19b76b15ef3420b251bd47a0ba0127589 (diff)
downloadlinux-3.10-1031be7a5fafd3a858dfaabb74d98f9ca20744a8.tar.gz
linux-3.10-1031be7a5fafd3a858dfaabb74d98f9ca20744a8.tar.bz2
linux-3.10-1031be7a5fafd3a858dfaabb74d98f9ca20744a8.zip
[PATCH] md: make sure the events count in an md array never returns to zero
Now that we sometimes step the array events count backwards (when transitioning dirty->clean where nothing else interesting has happened - so that we don't need to write to spares all the time), it is possible for the event count to return to zero, which is potentially confusing and triggers and MD_BUG. We could possibly remove the MD_BUG, but is just as easy, and probably safer, to make sure we never return to zero. Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/md/md.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index d1cb45f6d6a..ec3d8e8a0bd 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -1633,7 +1633,8 @@ repeat:
* and 'events' is odd, we can roll back to the previous clean state */
if (nospares
&& (mddev->in_sync && mddev->recovery_cp == MaxSector)
- && (mddev->events & 1))
+ && (mddev->events & 1)
+ && mddev->events != 1)
mddev->events--;
else {
/* otherwise we have to go forward and ... */