|
@@ -6101,9 +6101,14 @@ static int add_new_disk(struct mddev *mddev, mdu_disk_info_t *info)
|
|
export_rdev(rdev);
|
|
export_rdev(rdev);
|
|
|
|
|
|
if (mddev_is_clustered(mddev)) {
|
|
if (mddev_is_clustered(mddev)) {
|
|
- if (info->state & (1 << MD_DISK_CANDIDATE))
|
|
|
|
- md_cluster_ops->new_disk_ack(mddev, (err == 0));
|
|
|
|
- else {
|
|
|
|
|
|
+ if (info->state & (1 << MD_DISK_CANDIDATE)) {
|
|
|
|
+ if (!err) {
|
|
|
|
+ err = md_cluster_ops->new_disk_ack(mddev,
|
|
|
|
+ err == 0);
|
|
|
|
+ if (err)
|
|
|
|
+ md_kick_rdev_from_array(rdev);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
if (err)
|
|
if (err)
|
|
md_cluster_ops->add_new_disk_cancel(mddev);
|
|
md_cluster_ops->add_new_disk_cancel(mddev);
|
|
else
|
|
else
|