diff options
Diffstat (limited to 'drivers/md/dm-raid.c')
-rw-r--r-- | drivers/md/dm-raid.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c index 5bfe285ea9d1..2245d06d2045 100644 --- a/drivers/md/dm-raid.c +++ b/drivers/md/dm-raid.c | |||
@@ -3238,7 +3238,7 @@ static int raid_map(struct dm_target *ti, struct bio *bio) | |||
3238 | if (unlikely(bio_end_sector(bio) > mddev->array_sectors)) | 3238 | if (unlikely(bio_end_sector(bio) > mddev->array_sectors)) |
3239 | return DM_MAPIO_REQUEUE; | 3239 | return DM_MAPIO_REQUEUE; |
3240 | 3240 | ||
3241 | mddev->pers->make_request(mddev, bio); | 3241 | md_handle_request(mddev, bio); |
3242 | 3242 | ||
3243 | return DM_MAPIO_SUBMITTED; | 3243 | return DM_MAPIO_SUBMITTED; |
3244 | } | 3244 | } |
@@ -3297,11 +3297,10 @@ static const char *__raid_dev_status(struct raid_set *rs, struct md_rdev *rdev, | |||
3297 | static sector_t rs_get_progress(struct raid_set *rs, | 3297 | static sector_t rs_get_progress(struct raid_set *rs, |
3298 | sector_t resync_max_sectors, bool *array_in_sync) | 3298 | sector_t resync_max_sectors, bool *array_in_sync) |
3299 | { | 3299 | { |
3300 | sector_t r, recovery_cp, curr_resync_completed; | 3300 | sector_t r, curr_resync_completed; |
3301 | struct mddev *mddev = &rs->md; | 3301 | struct mddev *mddev = &rs->md; |
3302 | 3302 | ||
3303 | curr_resync_completed = mddev->curr_resync_completed ?: mddev->recovery_cp; | 3303 | curr_resync_completed = mddev->curr_resync_completed ?: mddev->recovery_cp; |
3304 | recovery_cp = mddev->recovery_cp; | ||
3305 | *array_in_sync = false; | 3304 | *array_in_sync = false; |
3306 | 3305 | ||
3307 | if (rs_is_raid0(rs)) { | 3306 | if (rs_is_raid0(rs)) { |
@@ -3330,9 +3329,11 @@ static sector_t rs_get_progress(struct raid_set *rs, | |||
3330 | } else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) | 3329 | } else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) |
3331 | r = curr_resync_completed; | 3330 | r = curr_resync_completed; |
3332 | else | 3331 | else |
3333 | r = recovery_cp; | 3332 | r = mddev->recovery_cp; |
3334 | 3333 | ||
3335 | if (r == MaxSector) { | 3334 | if ((r == MaxSector) || |
3335 | (test_bit(MD_RECOVERY_DONE, &mddev->recovery) && | ||
3336 | (mddev->curr_resync_completed == resync_max_sectors))) { | ||
3336 | /* | 3337 | /* |
3337 | * Sync complete. | 3338 | * Sync complete. |
3338 | */ | 3339 | */ |
@@ -3892,7 +3893,7 @@ static void raid_resume(struct dm_target *ti) | |||
3892 | 3893 | ||
3893 | static struct target_type raid_target = { | 3894 | static struct target_type raid_target = { |
3894 | .name = "raid", | 3895 | .name = "raid", |
3895 | .version = {1, 12, 1}, | 3896 | .version = {1, 13, 0}, |
3896 | .module = THIS_MODULE, | 3897 | .module = THIS_MODULE, |
3897 | .ctr = raid_ctr, | 3898 | .ctr = raid_ctr, |
3898 | .dtr = raid_dtr, | 3899 | .dtr = raid_dtr, |