diff options
| -rw-r--r-- | drivers/md/md.c | 10 | ||||
| -rw-r--r-- | drivers/md/md.h | 2 |
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 6aefa443481..30ba223e5ed 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -7180,6 +7180,7 @@ void md_done_sync(struct mddev *mddev, int blocks, int ok) | |||
| 7180 | wake_up(&mddev->recovery_wait); | 7180 | wake_up(&mddev->recovery_wait); |
| 7181 | if (!ok) { | 7181 | if (!ok) { |
| 7182 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 7182 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); |
| 7183 | set_bit(MD_RECOVERY_ERROR, &mddev->recovery); | ||
| 7183 | md_wakeup_thread(mddev->thread); | 7184 | md_wakeup_thread(mddev->thread); |
| 7184 | // stop recovery, signal do_sync .... | 7185 | // stop recovery, signal do_sync .... |
| 7185 | } | 7186 | } |
| @@ -7574,8 +7575,13 @@ void md_do_sync(struct md_thread *thread) | |||
| 7574 | printk(KERN_INFO | 7575 | printk(KERN_INFO |
| 7575 | "md: checkpointing %s of %s.\n", | 7576 | "md: checkpointing %s of %s.\n", |
| 7576 | desc, mdname(mddev)); | 7577 | desc, mdname(mddev)); |
| 7577 | mddev->recovery_cp = | 7578 | if (test_bit(MD_RECOVERY_ERROR, |
| 7578 | mddev->curr_resync_completed; | 7579 | &mddev->recovery)) |
| 7580 | mddev->recovery_cp = | ||
| 7581 | mddev->curr_resync_completed; | ||
| 7582 | else | ||
| 7583 | mddev->recovery_cp = | ||
| 7584 | mddev->curr_resync; | ||
| 7579 | } | 7585 | } |
| 7580 | } else | 7586 | } else |
| 7581 | mddev->recovery_cp = MaxSector; | 7587 | mddev->recovery_cp = MaxSector; |
diff --git a/drivers/md/md.h b/drivers/md/md.h index af443ab868d..c29e62ebc48 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h | |||
| @@ -307,6 +307,7 @@ struct mddev { | |||
| 307 | * REQUEST: user-space has requested a sync (used with SYNC) | 307 | * REQUEST: user-space has requested a sync (used with SYNC) |
| 308 | * CHECK: user-space request for check-only, no repair | 308 | * CHECK: user-space request for check-only, no repair |
| 309 | * RESHAPE: A reshape is happening | 309 | * RESHAPE: A reshape is happening |
| 310 | * ERROR: sync-action interrupted because io-error | ||
| 310 | * | 311 | * |
| 311 | * If neither SYNC or RESHAPE are set, then it is a recovery. | 312 | * If neither SYNC or RESHAPE are set, then it is a recovery. |
| 312 | */ | 313 | */ |
| @@ -320,6 +321,7 @@ struct mddev { | |||
| 320 | #define MD_RECOVERY_CHECK 7 | 321 | #define MD_RECOVERY_CHECK 7 |
| 321 | #define MD_RECOVERY_RESHAPE 8 | 322 | #define MD_RECOVERY_RESHAPE 8 |
| 322 | #define MD_RECOVERY_FROZEN 9 | 323 | #define MD_RECOVERY_FROZEN 9 |
| 324 | #define MD_RECOVERY_ERROR 10 | ||
| 323 | 325 | ||
| 324 | unsigned long recovery; | 326 | unsigned long recovery; |
| 325 | /* If a RAID personality determines that recovery (of a particular | 327 | /* If a RAID personality determines that recovery (of a particular |
