|
@@ -2599,8 +2599,10 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len)
|
|
|
|
|
|
if (err == 0) {
|
|
if (err == 0) {
|
|
md_kick_rdev_from_array(rdev);
|
|
md_kick_rdev_from_array(rdev);
|
|
- if (mddev->pers)
|
|
|
|
- md_update_sb(mddev, 1);
|
|
|
|
|
|
+ if (mddev->pers) {
|
|
|
|
+ set_bit(MD_CHANGE_DEVS, &mddev->flags);
|
|
|
|
+ md_wakeup_thread(mddev->thread);
|
|
|
|
+ }
|
|
md_new_event(mddev);
|
|
md_new_event(mddev);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -6175,7 +6177,11 @@ kick_rdev:
|
|
md_cluster_ops->remove_disk(mddev, rdev);
|
|
md_cluster_ops->remove_disk(mddev, rdev);
|
|
|
|
|
|
md_kick_rdev_from_array(rdev);
|
|
md_kick_rdev_from_array(rdev);
|
|
- md_update_sb(mddev, 1);
|
|
|
|
|
|
+ set_bit(MD_CHANGE_DEVS, &mddev->flags);
|
|
|
|
+ if (mddev->thread)
|
|
|
|
+ md_wakeup_thread(mddev->thread);
|
|
|
|
+ else
|
|
|
|
+ md_update_sb(mddev, 1);
|
|
md_new_event(mddev);
|
|
md_new_event(mddev);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
@@ -6240,7 +6246,9 @@ static int hot_add_disk(struct mddev *mddev, dev_t dev)
|
|
|
|
|
|
rdev->raid_disk = -1;
|
|
rdev->raid_disk = -1;
|
|
|
|
|
|
- md_update_sb(mddev, 1);
|
|
|
|
|
|
+ set_bit(MD_CHANGE_DEVS, &mddev->flags);
|
|
|
|
+ if (!mddev->thread)
|
|
|
|
+ md_update_sb(mddev, 1);
|
|
/*
|
|
/*
|
|
* Kick recovery, maybe this spare has to be added to the
|
|
* Kick recovery, maybe this spare has to be added to the
|
|
* array immediately.
|
|
* array immediately.
|