Skip to content

Commit e566aef

Browse files
GuoqingJiangshligit
authored andcommitted
md-cluster: call md_kick_rdev_from_array once ack failed
The new_disk_ack could return failure if WAITING_FOR_NEWDISK is not set, so we need to kick the dev from array in case failure happened. And we missed to check err before call new_disk_ack othwise we could kick a rdev which isn't in array, thanks for the reminder from Shaohua. Reviewed-by: NeilBrown <neilb@suse.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Shaohua Li <shli@fb.com>
1 parent 7d1e042 commit e566aef

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

drivers/md/md.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6101,9 +6101,14 @@ static int add_new_disk(struct mddev *mddev, mdu_disk_info_t *info)
61016101
export_rdev(rdev);
61026102

61036103
if (mddev_is_clustered(mddev)) {
6104-
if (info->state & (1 << MD_DISK_CANDIDATE))
6105-
md_cluster_ops->new_disk_ack(mddev, (err == 0));
6106-
else {
6104+
if (info->state & (1 << MD_DISK_CANDIDATE)) {
6105+
if (!err) {
6106+
err = md_cluster_ops->new_disk_ack(mddev,
6107+
err == 0);
6108+
if (err)
6109+
md_kick_rdev_from_array(rdev);
6110+
}
6111+
} else {
61076112
if (err)
61086113
md_cluster_ops->add_new_disk_cancel(mddev);
61096114
else

0 commit comments

Comments
 (0)