mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-19 15:39:07 +00:00
md: Use ->curr_resync as last completed request when cleanly aborting resync.
If a resync is aborted cleanly, ->curr_resync is a reliable record of where we got up to. If there was an error it is less reliable but we always know that ->curr_resync_completed is safe. So add a flag MD_RECOVERY_ERROR to differentiate between these cases and set recovery_cp accordingly. Signed-off-by: Jianpeng Ma <majianpeng@gmail.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
4f8c55c5ad
commit
0a19caabf0
@ -7180,6 +7180,7 @@ void md_done_sync(struct mddev *mddev, int blocks, int ok)
|
|||||||
wake_up(&mddev->recovery_wait);
|
wake_up(&mddev->recovery_wait);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||||
|
set_bit(MD_RECOVERY_ERROR, &mddev->recovery);
|
||||||
md_wakeup_thread(mddev->thread);
|
md_wakeup_thread(mddev->thread);
|
||||||
// stop recovery, signal do_sync ....
|
// stop recovery, signal do_sync ....
|
||||||
}
|
}
|
||||||
@ -7574,8 +7575,13 @@ void md_do_sync(struct md_thread *thread)
|
|||||||
printk(KERN_INFO
|
printk(KERN_INFO
|
||||||
"md: checkpointing %s of %s.\n",
|
"md: checkpointing %s of %s.\n",
|
||||||
desc, mdname(mddev));
|
desc, mdname(mddev));
|
||||||
mddev->recovery_cp =
|
if (test_bit(MD_RECOVERY_ERROR,
|
||||||
mddev->curr_resync_completed;
|
&mddev->recovery))
|
||||||
|
mddev->recovery_cp =
|
||||||
|
mddev->curr_resync_completed;
|
||||||
|
else
|
||||||
|
mddev->recovery_cp =
|
||||||
|
mddev->curr_resync;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
mddev->recovery_cp = MaxSector;
|
mddev->recovery_cp = MaxSector;
|
||||||
|
@ -307,6 +307,7 @@ struct mddev {
|
|||||||
* REQUEST: user-space has requested a sync (used with SYNC)
|
* REQUEST: user-space has requested a sync (used with SYNC)
|
||||||
* CHECK: user-space request for check-only, no repair
|
* CHECK: user-space request for check-only, no repair
|
||||||
* RESHAPE: A reshape is happening
|
* RESHAPE: A reshape is happening
|
||||||
|
* ERROR: sync-action interrupted because io-error
|
||||||
*
|
*
|
||||||
* If neither SYNC or RESHAPE are set, then it is a recovery.
|
* If neither SYNC or RESHAPE are set, then it is a recovery.
|
||||||
*/
|
*/
|
||||||
@ -320,6 +321,7 @@ struct mddev {
|
|||||||
#define MD_RECOVERY_CHECK 7
|
#define MD_RECOVERY_CHECK 7
|
||||||
#define MD_RECOVERY_RESHAPE 8
|
#define MD_RECOVERY_RESHAPE 8
|
||||||
#define MD_RECOVERY_FROZEN 9
|
#define MD_RECOVERY_FROZEN 9
|
||||||
|
#define MD_RECOVERY_ERROR 10
|
||||||
|
|
||||||
unsigned long recovery;
|
unsigned long recovery;
|
||||||
/* If a RAID personality determines that recovery (of a particular
|
/* If a RAID personality determines that recovery (of a particular
|
||||||
|
Loading…
Reference in New Issue
Block a user