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>

NeilBrown 24395a85 b6727b12

+3 -2
+3 -2
drivers/md/md.c
··· 6504 6504 skip: 6505 6505 mddev->curr_resync = 0; 6506 6506 mddev->curr_resync_completed = 0; 6507 - mddev->resync_min = 0; 6508 - mddev->resync_max = MaxSector; 6507 + if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery)) 6508 + /* We completed so max setting can be forgotten. */ 6509 + mddev->resync_max = MaxSector; 6509 6510 sysfs_notify(&mddev->kobj, NULL, "sync_completed"); 6510 6511 wake_up(&resync_wait); 6511 6512 set_bit(MD_RECOVERY_DONE, &mddev->recovery);