|
@@ -5121,6 +5121,7 @@ static int md_set_readonly(struct mddev *mddev, struct block_device *bdev)
|
|
|
printk("md: %s still in use.\n",mdname(mddev));
|
|
|
if (did_freeze) {
|
|
|
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
|
|
|
+ set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
|
|
|
md_wakeup_thread(mddev->thread);
|
|
|
}
|
|
|
err = -EBUSY;
|
|
@@ -5135,6 +5136,8 @@ static int md_set_readonly(struct mddev *mddev, struct block_device *bdev)
|
|
|
mddev->ro = 1;
|
|
|
set_disk_ro(mddev->gendisk, 1);
|
|
|
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
|
|
|
+ set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
|
|
|
+ md_wakeup_thread(mddev->thread);
|
|
|
sysfs_notify_dirent_safe(mddev->sysfs_state);
|
|
|
err = 0;
|
|
|
}
|
|
@@ -5178,6 +5181,7 @@ static int do_md_stop(struct mddev *mddev, int mode,
|
|
|
mutex_unlock(&mddev->open_mutex);
|
|
|
if (did_freeze) {
|
|
|
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
|
|
|
+ set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
|
|
|
md_wakeup_thread(mddev->thread);
|
|
|
}
|
|
|
return -EBUSY;
|