| @@ -3834,7 +3834,7 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len) · 3833 unmodified lines |
| 3834 | err = -EBUSY; | 3834 | err = -EBUSY; |
| 3835 | } | 3835 | } |
| 3836 | spin_unlock(&mddev->lock); | 3836 | spin_unlock(&mddev->lock); |
| 3837 | return err; | 3837 | return err ?: len; |
| 3838 | } | 3838 | } |
| 3839 | err = mddev_lock(mddev); | 3839 | err = mddev_lock(mddev); |
| 3840 | if (err) | 3840 | if (err) |
| @@ -4217,13 +4217,14 @@ action_store(struct mddev *mddev, const char *page, size_t len) · 376 unmodified lines |
| 4217 | set_bit(MD_RECOVERY_FROZEN, &mddev->recovery); | 4217 | set_bit(MD_RECOVERY_FROZEN, &mddev->recovery); |
| 4218 | else | 4218 | else |
| 4219 | clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery); | 4219 | clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery); |
| 4220 | flush_workqueue(md_misc_wq); | 4220 | if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) && |
| 4221 | if (mddev->sync_thread) { | 4221 | mddev_lock(mddev) == 0) { |
| 4222 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 4222 | flush_workqueue(md_misc_wq); |
| 4223 | if (mddev_lock(mddev) == 0) { | 4223 | if (mddev->sync_thread) { |
| | 4224 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); |
| 4224 | md_reap_sync_thread(mddev); | 4225 | md_reap_sync_thread(mddev); |
| 4225 | mddev_unlock(mddev); | | |
| 4226 | } | 4226 | } |
| | 4227 | mddev_unlock(mddev); |
| 4227 | } | 4228 | } |
| 4228 | } else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) || | 4229 | } else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) || |
| 4229 | test_bit(MD_RECOVERY_NEEDED, &mddev->recovery)) | 4230 | test_bit(MD_RECOVERY_NEEDED, &mddev->recovery)) |
| @@ -8261,6 +8262,7 @@ void md_reap_sync_thread(struct mddev *mddev) · 4031 unmodified lines |
| 8261 | if (mddev_is_clustered(mddev)) | 8262 | if (mddev_is_clustered(mddev)) |
| 8262 | md_cluster_ops->metadata_update_finish(mddev); | 8263 | md_cluster_ops->metadata_update_finish(mddev); |
| 8263 | clear_bit(MD_RECOVERY_RUNNING, &mddev->recovery); | 8264 | clear_bit(MD_RECOVERY_RUNNING, &mddev->recovery); |
| | 8265 | clear_bit(MD_RECOVERY_DONE, &mddev->recovery); |
| 8264 | clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); | 8266 | clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); |
| 8265 | clear_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); | 8267 | clear_bit(MD_RECOVERY_RESHAPE, &mddev->recovery); |
| 8266 | clear_bit(MD_RECOVERY_REQUESTED, &mddev->recovery); | 8268 | clear_bit(MD_RECOVERY_REQUESTED, &mddev->recovery); |