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>

NeilBrown 4d484a4a 1a67dde0

+1
+1
drivers/md/md.c
··· 3599 if (max < mddev->resync_min) 3600 return -EINVAL; 3601 if (max < mddev->resync_max && 3602 test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) 3603 return -EBUSY; 3604
··· 3599 if (max < mddev->resync_min) 3600 return -EINVAL; 3601 if (max < mddev->resync_max && 3602 + mddev->ro == 0 && 3603 test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) 3604 return -EBUSY; 3605