md: don't update curr_resync_completed without also updating reshape_position.
In order for the metadata to always be consistent, we mustn't updated
curr_resync_completed without also updating reshape_position.
The reshape code updates both at the same time. However since
commit 97e4f42d62
the common md_do_sync will sometimes update curr_resync_completed
but is not in a position to update reshape_position.
So if MD_RECOVERY_RESHAPE is set (indicating that a reshape is
happening, so reshape_position might change), don't update
curr_resync_completed in md_do_sync, leave it to the per-personality
reshape code.
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
848b318236
commit
7a91ee1f62
|
@ -6362,12 +6362,13 @@ void md_do_sync(mddev_t *mddev)
|
|||
|
||||
skipped = 0;
|
||||
|
||||
if ((mddev->curr_resync > mddev->curr_resync_completed &&
|
||||
(mddev->curr_resync - mddev->curr_resync_completed)
|
||||
> (max_sectors >> 4)) ||
|
||||
(j - mddev->curr_resync_completed)*2
|
||||
>= mddev->resync_max - mddev->curr_resync_completed
|
||||
) {
|
||||
if (!test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
|
||||
((mddev->curr_resync > mddev->curr_resync_completed &&
|
||||
(mddev->curr_resync - mddev->curr_resync_completed)
|
||||
> (max_sectors >> 4)) ||
|
||||
(j - mddev->curr_resync_completed)*2
|
||||
>= mddev->resync_max - mddev->curr_resync_completed
|
||||
)) {
|
||||
/* time to update curr_resync_completed */
|
||||
blk_unplug(mddev->queue);
|
||||
wait_event(mddev->recovery_wait,
|
||||
|
|
Loading…
Reference in New Issue