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)  	if (unlikely(bio_end_sector(bio) > mddev->array_sectors))  		return DM_MAPIO_REQUEUE; -	mddev->pers->make_request(mddev, bio); +	md_handle_request(mddev, bio);  	return DM_MAPIO_SUBMITTED;  } @@ -3297,11 +3297,10 @@ static const char *__raid_dev_status(struct raid_set *rs, struct md_rdev *rdev,  static sector_t rs_get_progress(struct raid_set *rs,  				sector_t resync_max_sectors, bool *array_in_sync)  { -	sector_t r, recovery_cp, curr_resync_completed; +	sector_t r, curr_resync_completed;  	struct mddev *mddev = &rs->md;  	curr_resync_completed = mddev->curr_resync_completed ?: mddev->recovery_cp; -	recovery_cp = mddev->recovery_cp;  	*array_in_sync = false;  	if (rs_is_raid0(rs)) { @@ -3330,9 +3329,11 @@ static sector_t rs_get_progress(struct raid_set *rs,  		} else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))  			r = curr_resync_completed;  		else -			r = recovery_cp; +			r = mddev->recovery_cp; -		if (r == MaxSector) { +		if ((r == MaxSector) || +		    (test_bit(MD_RECOVERY_DONE, &mddev->recovery) && +		     (mddev->curr_resync_completed == resync_max_sectors))) {  			/*  			 * Sync complete.  			 */ @@ -3892,7 +3893,7 @@ static void raid_resume(struct dm_target *ti)  static struct target_type raid_target = {  	.name = "raid", -	.version = {1, 12, 1}, +	.version = {1, 13, 0},  	.module = THIS_MODULE,  	.ctr = raid_ctr,  	.dtr = raid_dtr, | 
