|
@@ -8623,8 +8623,10 @@ void md_do_sync(struct md_thread *thread)
|
|
|
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);
|
|
|
+ if (!mddev_is_clustered(mddev)) {
|
|
|
+ set_capacity(mddev->gendisk, mddev->array_sectors);
|
|
|
+ revalidate_disk(mddev->gendisk);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
spin_lock(&mddev->lock);
|
|
@@ -8968,6 +8970,8 @@ EXPORT_SYMBOL(md_check_recovery);
|
|
|
void md_reap_sync_thread(struct mddev *mddev)
|
|
|
{
|
|
|
struct md_rdev *rdev;
|
|
|
+ sector_t old_dev_sectors = mddev->dev_sectors;
|
|
|
+ bool is_reshaped = false;
|
|
|
|
|
|
/* resync has finished, collect result */
|
|
|
md_unregister_thread(&mddev->sync_thread);
|
|
@@ -8982,8 +8986,11 @@ void md_reap_sync_thread(struct mddev *mddev)
|
|
|
}
|
|
|
}
|
|
|
if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
|
|
|
- mddev->pers->finish_reshape)
|
|
|
+ mddev->pers->finish_reshape) {
|
|
|
mddev->pers->finish_reshape(mddev);
|
|
|
+ if (mddev_is_clustered(mddev))
|
|
|
+ is_reshaped = true;
|
|
|
+ }
|
|
|
|
|
|
/* If array is no-longer degraded, then any saved_raid_disk
|
|
|
* information must be scrapped.
|
|
@@ -9004,6 +9011,14 @@ void md_reap_sync_thread(struct mddev *mddev)
|
|
|
clear_bit(MD_RECOVERY_RESHAPE, &mddev->recovery);
|
|
|
clear_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
|
|
|
clear_bit(MD_RECOVERY_CHECK, &mddev->recovery);
|
|
|
+ /*
|
|
|
+ * We call md_cluster_ops->update_size here because sync_size could
|
|
|
+ * be changed by md_update_sb, and MD_RECOVERY_RESHAPE is cleared,
|
|
|
+ * so it is time to update size across cluster.
|
|
|
+ */
|
|
|
+ if (mddev_is_clustered(mddev) && is_reshaped
|
|
|
+ && !test_bit(MD_CLOSING, &mddev->flags))
|
|
|
+ md_cluster_ops->update_size(mddev, old_dev_sectors);
|
|
|
wake_up(&resync_wait);
|
|
|
/* flag recovery needed just to double check */
|
|
|
set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
|