From: Dan Williams Date: Mon, 30 Aug 2010 07:33:33 +0000 (+1000) Subject: md: don't clear MD_CHANGE_CLEAN in md_update_sb() for external arrays X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=bd52b746262c8d77e73903d6608014fb2fcdcd9d;p=mv-sheeva.git md: don't clear MD_CHANGE_CLEAN in md_update_sb() for external arrays If this bit is cleared in md_update_sb() the kernel will allow writes to the array if userspace triggers md_allow_write(), e.g. through stripe_cache_size, when mdmon is not active. When mdmon is active the array transitions to active-idle bypassing write-pending, setting up a race for mdmon to set the array clean before a write arrives. Signed-off-by: Dan Williams Signed-off-by: NeilBrown --- diff --git a/drivers/md/md.c b/drivers/md/md.c index c148b630215..a1f6b59b8b3 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -2167,9 +2167,10 @@ repeat: rdev->recovery_offset = mddev->curr_resync_completed; } - if (mddev->external || !mddev->persistent) { + if (!mddev->persistent) { + if (!mddev->external) + clear_bit(MD_CHANGE_CLEAN, &mddev->flags); clear_bit(MD_CHANGE_DEVS, &mddev->flags); - clear_bit(MD_CHANGE_CLEAN, &mddev->flags); wake_up(&mddev->sb_wait); return; }