diff options
| author | NeilBrown <neilb@suse.de> | 2009-08-12 20:41:50 -0400 |
|---|---|---|
| committer | NeilBrown <neilb@suse.de> | 2009-08-12 20:41:50 -0400 |
| commit | 4d484a4a7a5126410eed5f8dd329a33f6eeed068 (patch) | |
| tree | 9fe49a23117adc2d475711f39a16c1718bab4b7f | |
| parent | 1a67dde0abba36421a1257d01ba9de2f6d1c160a (diff) | |
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 <neilb@suse.de>
| -rw-r--r-- | drivers/md/md.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index d18805fea111..103f2d33fa89 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) | |||
| 3599 | if (max < mddev->resync_min) | 3599 | if (max < mddev->resync_min) |
| 3600 | return -EINVAL; | 3600 | return -EINVAL; |
| 3601 | if (max < mddev->resync_max && | 3601 | if (max < mddev->resync_max && |
| 3602 | mddev->ro == 0 && | ||
| 3602 | test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) | 3603 | test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) |
| 3603 | return -EBUSY; | 3604 | return -EBUSY; |
| 3604 | 3605 | ||
