diff options
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r-- | drivers/md/md.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 4f5ecbe94ccb..c702de18207a 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -5409,9 +5409,13 @@ static int md_set_readonly(struct mddev *mddev, struct block_device *bdev) | |||
5409 | * which will now never happen */ | 5409 | * which will now never happen */ |
5410 | wake_up_process(mddev->sync_thread->tsk); | 5410 | wake_up_process(mddev->sync_thread->tsk); |
5411 | 5411 | ||
5412 | if (mddev->external && test_bit(MD_CHANGE_PENDING, &mddev->flags)) | ||
5413 | return -EBUSY; | ||
5412 | mddev_unlock(mddev); | 5414 | mddev_unlock(mddev); |
5413 | wait_event(resync_wait, !test_bit(MD_RECOVERY_RUNNING, | 5415 | wait_event(resync_wait, !test_bit(MD_RECOVERY_RUNNING, |
5414 | &mddev->recovery)); | 5416 | &mddev->recovery)); |
5417 | wait_event(mddev->sb_wait, | ||
5418 | !test_bit(MD_CHANGE_PENDING, &mddev->flags)); | ||
5415 | mddev_lock_nointr(mddev); | 5419 | mddev_lock_nointr(mddev); |
5416 | 5420 | ||
5417 | mutex_lock(&mddev->open_mutex); | 5421 | mutex_lock(&mddev->open_mutex); |
@@ -8160,6 +8164,7 @@ void md_check_recovery(struct mddev *mddev) | |||
8160 | md_reap_sync_thread(mddev); | 8164 | md_reap_sync_thread(mddev); |
8161 | clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery); | 8165 | clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery); |
8162 | clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery); | 8166 | clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery); |
8167 | clear_bit(MD_CHANGE_PENDING, &mddev->flags); | ||
8163 | goto unlock; | 8168 | goto unlock; |
8164 | } | 8169 | } |
8165 | 8170 | ||