md: don't clear endpoint for resync when resync is interrupted.
If a 'sync_max' has been set (via sysfs), it is wrong to clear it until a resync (or reshape or recovery ...) actually reached that point. So if a resync is interrupted (e.g. by device failure), leave 'resync_max' unchanged. This is particularly important for 'reshape' operations that do not change the size of the array. For such operations mdadm needs to monitor the reshape taking rolling backups of the section being reshaped. If resync_max gets cleared, the reshape can get ahead of mdadm and then the backups that mdadm creates are useless. This is suitable for 2.6.31.y stable kernels. Cc: stable@kernel.org Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Родитель
b6727b12dd
Коммит
24395a85d8
|
@ -6504,8 +6504,9 @@ void md_do_sync(mddev_t *mddev)
|
|||
skip:
|
||||
mddev->curr_resync = 0;
|
||||
mddev->curr_resync_completed = 0;
|
||||
mddev->resync_min = 0;
|
||||
mddev->resync_max = MaxSector;
|
||||
if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery))
|
||||
/* We completed so max setting can be forgotten. */
|
||||
mddev->resync_max = MaxSector;
|
||||
sysfs_notify(&mddev->kobj, NULL, "sync_completed");
|
||||
wake_up(&resync_wait);
|
||||
set_bit(MD_RECOVERY_DONE, &mddev->recovery);
|
||||
|
|
Загрузка…
Ссылка в новой задаче