From: NeilBrown Date: Thu, 13 Aug 2009 00:41:50 +0000 (+1000) Subject: md: allow upper limit for resync/reshape to be set when array is read-only X-Git-Tag: v2.6.31-rc6~6^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4d484a4a7a5126410eed5f8dd329a33f6eeed068;p=platform%2Fkernel%2Flinux-stable.git md: allow upper limit for resync/reshape to be set when array is read-only Normally we only allow the upper limit for a reshape to be decreased when the array not performing a sync/recovery/reshape, otherwise there could be races. But if an array is part-way through a reshape when it is assembled the reshape is started immediately leaving no window to set an upper bound. If the array is started read-only, the reshape will be suspended until the array becomes writable, so that provides a window during which it is perfectly safe to reduce the upper limit of a reshape. So: allow the upper limit (sync_max) to be reduced even if the reshape thread is running, as long as the array is still read-only. Signed-off-by: NeilBrown --- diff --git a/drivers/md/md.c b/drivers/md/md.c index d18805f..103f2d3 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -3599,6 +3599,7 @@ max_sync_store(mddev_t *mddev, const char *buf, size_t len) if (max < mddev->resync_min) return -EINVAL; if (max < mddev->resync_max && + mddev->ro == 0 && test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) return -EBUSY;