From: NeilBrown Date: Thu, 17 Jun 2010 07:41:03 +0000 (+1000) Subject: md/raid5: add a missing 'continue' in a loop. X-Git-Tag: v2.6.35-rc4~52^2~1 X-Git-Url: http://bbs.cooldavid.org/git/?a=commitdiff_plain;h=2f115882499f3e5eca33d1df07b8876cc752a1ff;p=net-next-2.6.git md/raid5: add a missing 'continue' in a loop. As the comment says, the tail of this loop only applies to devices that are not fully in sync, so if In_sync was set, we should avoid the rest of the loop. This bug will hardly ever cause an actual problem. The worst it can do is allow an array to be assembled that is dirty and degraded, which is not generally a good idea (without warning the sysadmin first). This will only happen if the array is RAID4 or a RAID5/6 in an intermediate state during a reshape and so has one drive that is all 'parity' - no data - while some other device has failed. This is certainly possible, but not at all common. Signed-off-by: NeilBrown --- diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 09f07dadf40..66cd4797339 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -5057,8 +5057,10 @@ static int run(mddev_t *mddev) list_for_each_entry(rdev, &mddev->disks, same_set) { if (rdev->raid_disk < 0) continue; - if (test_bit(In_sync, &rdev->flags)) + if (test_bit(In_sync, &rdev->flags)) { working_disks++; + continue; + } /* This disc is not fully in-sync. However if it * just stored parity (beyond the recovery_offset), * when we don't need to be concerned about the