|
@@ -7880,6 +7880,9 @@ void md_do_sync(struct md_thread *thread)
|
|
|
break;
|
|
|
|
|
|
j += sectors;
|
|
|
+ if (j > max_sectors)
|
|
|
+ /* when skipping, extra large numbers can be returned. */
|
|
|
+ j = max_sectors;
|
|
|
if (j > 2)
|
|
|
mddev->curr_resync = j;
|
|
|
if (mddev_is_clustered(mddev))
|
|
@@ -7948,6 +7951,12 @@ void md_do_sync(struct md_thread *thread)
|
|
|
blk_finish_plug(&plug);
|
|
|
wait_event(mddev->recovery_wait, !atomic_read(&mddev->recovery_active));
|
|
|
|
|
|
+ if (!test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
|
|
|
+ !test_bit(MD_RECOVERY_INTR, &mddev->recovery) &&
|
|
|
+ mddev->curr_resync > 2) {
|
|
|
+ mddev->curr_resync_completed = mddev->curr_resync;
|
|
|
+ sysfs_notify(&mddev->kobj, NULL, "sync_completed");
|
|
|
+ }
|
|
|
/* tell personality that we are finished */
|
|
|
mddev->pers->sync_request(mddev, max_sectors, &skipped);
|
|
|
|