|
|
@@ -5355,6 +5355,10 @@ static sector_t reshape_request(struct mddev *mddev, sector_t sector_nr, int *sk
|
|
|
conf->reshape_progress < raid5_size(mddev, 0, 0)) {
|
|
|
sector_nr = raid5_size(mddev, 0, 0)
|
|
|
- conf->reshape_progress;
|
|
|
+ } else if (mddev->reshape_backwards &&
|
|
|
+ conf->reshape_progress == MaxSector) {
|
|
|
+ /* shouldn't happen, but just in case, finish up.*/
|
|
|
+ sector_nr = MaxSector;
|
|
|
} else if (!mddev->reshape_backwards &&
|
|
|
conf->reshape_progress > 0)
|
|
|
sector_nr = conf->reshape_progress;
|
|
|
@@ -7446,6 +7450,7 @@ static void end_reshape(struct r5conf *conf)
|
|
|
rdev->data_offset = rdev->new_data_offset;
|
|
|
smp_wmb();
|
|
|
conf->reshape_progress = MaxSector;
|
|
|
+ conf->mddev->reshape_position = MaxSector;
|
|
|
spin_unlock_irq(&conf->device_lock);
|
|
|
wake_up(&conf->wait_for_overlap);
|
|
|
|