| @@ -4831,7 +4831,7 @@ action_store(struct mddev *mddev, const char *page, size_t len) · 4830 unmodified lines |
| 4831 | flush_workqueue(md_misc_wq); | 4831 | flush_workqueue(md_misc_wq); |
| 4832 | if (mddev->sync_thread) { | 4832 | if (mddev->sync_thread) { |
| 4833 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 4833 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); |
| 4834 | md_reap_sync_thread(mddev, true); | 4834 | md_reap_sync_thread(mddev); |
| 4835 | } | 4835 | } |
| 4836 | mddev_unlock(mddev); | 4836 | mddev_unlock(mddev); |
| 4837 | } | 4837 | } |
| @@ -6197,7 +6197,7 @@ static void __md_stop_writes(struct mddev *mddev) · 1359 unmodified lines |
| 6197 | flush_workqueue(md_misc_wq); | 6197 | flush_workqueue(md_misc_wq); |
| 6198 | if (mddev->sync_thread) { | 6198 | if (mddev->sync_thread) { |
| 6199 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 6199 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); |
| 6200 | md_reap_sync_thread(mddev, true); | 6200 | md_reap_sync_thread(mddev); |
| 6201 | } | 6201 | } |
| 6202 | | 6202 | |
| 6203 | del_timer_sync(&mddev->safemode_timer); | 6203 | del_timer_sync(&mddev->safemode_timer); |
| @@ -9303,7 +9303,7 @@ void md_check_recovery(struct mddev *mddev) · 3099 unmodified lines |
| 9303 | * ->spare_active and clear saved_raid_disk | 9303 | * ->spare_active and clear saved_raid_disk |
| 9304 | */ | 9304 | */ |
| 9305 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 9305 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); |
| 9306 | md_reap_sync_thread(mddev, true); | 9306 | md_reap_sync_thread(mddev); |
| 9307 | clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery); | 9307 | clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery); |
| 9308 | clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery); | 9308 | clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery); |
| 9309 | clear_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags); | 9309 | clear_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags); |
| @@ -9338,7 +9338,7 @@ void md_check_recovery(struct mddev *mddev) · 28 unmodified lines |
| 9338 | goto unlock; | 9338 | goto unlock; |
| 9339 | } | 9339 | } |
| 9340 | if (mddev->sync_thread) { | 9340 | if (mddev->sync_thread) { |
| 9341 | md_reap_sync_thread(mddev, true); | 9341 | md_reap_sync_thread(mddev); |
| 9342 | goto unlock; | 9342 | goto unlock; |
| 9343 | } | 9343 | } |
| 9344 | /* Set RUNNING before clearing NEEDED to avoid | 9344 | /* Set RUNNING before clearing NEEDED to avoid |
| @@ -9411,18 +9411,14 @@ void md_check_recovery(struct mddev *mddev) · 66 unmodified lines |
| 9411 | } | 9411 | } |
| 9412 | EXPORT_SYMBOL(md_check_recovery); | 9412 | EXPORT_SYMBOL(md_check_recovery); |
| 9413 | | 9413 | |
| 9414 | void md_reap_sync_thread(struct mddev *mddev, bool reconfig_mutex_held) | 9414 | void md_reap_sync_thread(struct mddev *mddev) |
| 9415 | { | 9415 | { |
| 9416 | struct md_rdev *rdev; | 9416 | struct md_rdev *rdev; |
| 9417 | sector_t old_dev_sectors = mddev->dev_sectors; | 9417 | sector_t old_dev_sectors = mddev->dev_sectors; |
| 9418 | bool is_reshaped = false; | 9418 | bool is_reshaped = false; |
| 9419 | | 9419 | |
| 9420 | if (reconfig_mutex_held) | | |
| 9421 | mddev_unlock(mddev); | | |
| 9422 | /* resync has finished, collect result */ | 9420 | /* resync has finished, collect result */ |
| 9423 | md_unregister_thread(&mddev->sync_thread); | 9421 | md_unregister_thread(&mddev->sync_thread); |
| 9424 | if (reconfig_mutex_held) | | |
| 9425 | mddev_lock_nointr(mddev); | | |
| 9426 | if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery) && | 9422 | if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery) && |
| 9427 | !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) && | 9423 | !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) && |
| 9428 | mddev->degraded != mddev->raid_disks) { | 9424 | mddev->degraded != mddev->raid_disks) { |