|
|
@@ -8569,6 +8569,19 @@ void md_do_sync(struct md_thread *thread)
|
|
|
set_mask_bits(&mddev->sb_flags, 0,
|
|
|
BIT(MD_SB_CHANGE_PENDING) | BIT(MD_SB_CHANGE_DEVS));
|
|
|
|
|
|
+ if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
|
|
|
+ !test_bit(MD_RECOVERY_INTR, &mddev->recovery) &&
|
|
|
+ mddev->delta_disks > 0 &&
|
|
|
+ mddev->pers->finish_reshape &&
|
|
|
+ mddev->pers->size &&
|
|
|
+ mddev->queue) {
|
|
|
+ mddev_lock_nointr(mddev);
|
|
|
+ md_set_array_sectors(mddev, mddev->pers->size(mddev, 0, 0));
|
|
|
+ mddev_unlock(mddev);
|
|
|
+ set_capacity(mddev->gendisk, mddev->array_sectors);
|
|
|
+ revalidate_disk(mddev->gendisk);
|
|
|
+ }
|
|
|
+
|
|
|
spin_lock(&mddev->lock);
|
|
|
if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery)) {
|
|
|
/* We completed so min/max setting can be forgotten if used. */
|