|
@@ -4752,6 +4752,8 @@ md_attr_store(struct kobject *kobj, struct attribute *attr,
|
|
}
|
|
}
|
|
mddev_get(mddev);
|
|
mddev_get(mddev);
|
|
spin_unlock(&all_mddevs_lock);
|
|
spin_unlock(&all_mddevs_lock);
|
|
|
|
+ if (entry->store == new_dev_store)
|
|
|
|
+ flush_workqueue(md_misc_wq);
|
|
rv = mddev_lock(mddev);
|
|
rv = mddev_lock(mddev);
|
|
if (!rv) {
|
|
if (!rv) {
|
|
rv = entry->store(mddev, page, length);
|
|
rv = entry->store(mddev, page, length);
|
|
@@ -6397,6 +6399,10 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
|
|
goto abort;
|
|
goto abort;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (cmd == ADD_NEW_DISK)
|
|
|
|
+ /* need to ensure md_delayed_delete() has completed */
|
|
|
|
+ flush_workqueue(md_misc_wq);
|
|
|
|
+
|
|
err = mddev_lock(mddev);
|
|
err = mddev_lock(mddev);
|
|
if (err) {
|
|
if (err) {
|
|
printk(KERN_INFO
|
|
printk(KERN_INFO
|