From nobody Mon Oct 6 03:16:00 2025 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DE88B2E36F2; Fri, 25 Jul 2025 03:42:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753414962; cv=none; b=R61Uxkzry9jcFoOV1gr6Lr488cfvNlR3rVVZgSJoD7SKci3cdy1LpGaF1E90ibaiDneBm0wISqY33pxqESURyRJ8YBwQ9RSFRD3WzaZLs3dLOgUmIVQSrpIwV5wggKjibVqad51woUP+klT7C5zcbgm4lLee4lchYe2PfTwnv9o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753414962; c=relaxed/simple; bh=8Uik39Jx4LSGqUPRqIiOZx/J++HO7fj6bjGaJHNgIX8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=EnFK/bOS2Kv71kF5CzaW8R10iRfSj4xnY+L+hRUvtCWRtkJG9uAvjp45zOnj+d8/zF6QAwUCbUnP+WI8K2WhXgYhK/sWP82NDLCSbM/tk5NnjO7QU+HAQPVvZr25vK/XpJVTouiD2x7dhRv0iutqYyfUuK3c+0N3hCfPci4NuQ8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4bpDGQ6FYrzKHLxX; Fri, 25 Jul 2025 11:42:38 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.128]) by mail.maildlp.com (Postfix) with ESMTP id A19AF1A0F86; Fri, 25 Jul 2025 11:42:37 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.104.67]) by APP4 (Coremail) with SMTP id gCh0CgB3QBEr_YJoP+2eBQ--.51659S5; Fri, 25 Jul 2025 11:42:37 +0800 (CST) From: Yu Kuai To: song@kernel.org, yukuai3@huawei.com Cc: linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org, yukuai1@huaweicloud.com, yi.zhang@huawei.com, yangerkun@huawei.com, johnny.chenyi@huawei.com Subject: [PATCH 1/3] md: cleanup no_add tag in remove_and_add_spares() Date: Fri, 25 Jul 2025 11:36:03 +0800 Message-Id: <20250725033605.3147379-2-yukuai1@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20250725033605.3147379-1-yukuai1@huaweicloud.com> References: <20250725033605.3147379-1-yukuai1@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: gCh0CgB3QBEr_YJoP+2eBQ--.51659S5 X-Coremail-Antispam: 1UD129KBjvJXoWxJr43Cw4fGrW8Kr4kAry8AFb_yoW8urW3pa 1xtasxGr4UZ3ySqF4UWF1DCa45Jr1xXrWvya43Wa4Ivw13Ar1qga4rXFWYvr9Yva4F9F4r Jw18tw45Cry7KFUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUm214x267AKxVW5JVWrJwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_Jr4l82xGYIkIc2 x26xkF7I0E14v26r1I6r4UM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0 Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwCY1x0262kKe7AKxVWUAVWUtw CF04k20xvY0x0EwIxGrwCF54CYxVCY1x0262kKe7AKxVWUAVWUtwCFx2IqxVCFs4IE7xkE bVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67 AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI 42IY6xIIjxv20xvEc7CjxVAFwI0_Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMI IF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVF xhVjvjDU0xZFpf9x0JUfDGrUUUUU= X-CM-SenderInfo: 51xn3trlr6x35dzhxuhorxvhhfrp/ Content-Type: text/plain; charset="utf-8" From: Yu Kuai Just fold in the tag into remove_spares() to make code cleaner. Signed-off-by: Yu Kuai --- drivers/md/md.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/md/md.c b/drivers/md/md.c index 046fe85c76fe..a0c05b37d087 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -9459,10 +9459,10 @@ static bool md_spares_need_change(struct mddev *mdd= ev) return false; } =20 -static int remove_spares(struct mddev *mddev, struct md_rdev *this) +static bool remove_spares(struct mddev *mddev, struct md_rdev *this) { struct md_rdev *rdev; - int removed =3D 0; + bool removed =3D false; =20 rdev_for_each(rdev, mddev) { if ((this =3D=3D NULL || rdev =3D=3D this) && rdev_removeable(rdev) && @@ -9470,14 +9470,18 @@ static int remove_spares(struct mddev *mddev, struc= t md_rdev *this) sysfs_unlink_rdev(mddev, rdev); rdev->saved_raid_disk =3D rdev->raid_disk; rdev->raid_disk =3D -1; - removed++; + removed =3D true; } } =20 - if (removed && mddev->kobj.sd) - sysfs_notify_dirent_safe(mddev->sysfs_degraded); + if (removed) { + if (mddev->kobj.sd) + sysfs_notify_dirent_safe(mddev->sysfs_degraded); + + set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); + } =20 - return removed; + return this && removed; } =20 static int remove_and_add_spares(struct mddev *mddev, @@ -9485,15 +9489,13 @@ static int remove_and_add_spares(struct mddev *mdde= v, { struct md_rdev *rdev; int spares =3D 0; - int removed =3D 0; =20 if (this && test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) /* Mustn't remove devices when resync thread is running */ return 0; =20 - removed =3D remove_spares(mddev, this); - if (this && removed) - goto no_add; + if (remove_spares(mddev, this)) + return 0; =20 rdev_for_each(rdev, mddev) { if (this && this !=3D rdev) @@ -9513,9 +9515,7 @@ static int remove_and_add_spares(struct mddev *mddev, set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); } } -no_add: - if (removed) - set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); + return spares; } =20 --=20 2.39.2 From nobody Mon Oct 6 03:16:00 2025 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4843F236431; Fri, 25 Jul 2025 03:42:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753414962; cv=none; b=f7va0Vd9FbIv493BjoJkIbl4cHAfpNUNInQpZqP8qY7nsyvvQrfMy0J4RP4n1REMpceYtKmm2tcCJXp1Ubo7sZ0UAy8pqR1/yzbxp560+Nu2UquQhpmn39qqaUhlD2e0qVVffNt6fPYCb8+ZotrbG1FEzws0phMUhjzyKb8WM1A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753414962; c=relaxed/simple; bh=0kRtxAUEnPWvxnoOUidxKdQViNPJ4AFXDQ7w9monGPE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VZ0zBQLyU5fj83ryvvJdbdQqij9AignZg8L/VJ8qzsNvxh8if8wA8iCpqqfnSpY+FZwc2Q7ARY1HhkB+2W1UsCE39J4iMaIQL6955dD8PKdrHgOYXyRN3R2QeQYFwDhE1djvdrWj+z8kp7sXrZJBKqBdrrSQ0RKShonVddcl3kc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4bpDGR1sjszYQv22; Fri, 25 Jul 2025 11:42:39 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.128]) by mail.maildlp.com (Postfix) with ESMTP id ED7FD1A018D; Fri, 25 Jul 2025 11:42:37 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.104.67]) by APP4 (Coremail) with SMTP id gCh0CgB3QBEr_YJoP+2eBQ--.51659S6; Fri, 25 Jul 2025 11:42:37 +0800 (CST) From: Yu Kuai To: song@kernel.org, yukuai3@huawei.com Cc: linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org, yukuai1@huaweicloud.com, yi.zhang@huawei.com, yangerkun@huawei.com, johnny.chenyi@huawei.com Subject: [PATCH 2/3] md: factor out a helper remove_spare() Date: Fri, 25 Jul 2025 11:36:04 +0800 Message-Id: <20250725033605.3147379-3-yukuai1@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20250725033605.3147379-1-yukuai1@huaweicloud.com> References: <20250725033605.3147379-1-yukuai1@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: gCh0CgB3QBEr_YJoP+2eBQ--.51659S6 X-Coremail-Antispam: 1UD129KBjvJXoWxCF15Cw4DWry5XrWrKF4DArb_yoWrWF43pa 1ftFn8Gr4UA3yfJr4UCF4DGa45Kr10qrWvya43ua4xX3W3Cr1qqa4rWFWUAr9YyasY9F45 Aa18ta15CryIgF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUm214x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_Jryl82xGYIkIc2 x26xkF7I0E14v26r4j6ryUM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0 Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwCY1x0262kKe7AKxVWUAVWUtw CF04k20xvY0x0EwIxGrwCF54CYxVCY1x0262kKe7AKxVWUAVWUtwCFx2IqxVCFs4IE7xkE bVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67 AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI 42IY6xIIjxv20xvEc7CjxVAFwI0_Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMI IF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVF xhVjvjDU0xZFpf9x0JUFoGdUUUUU= X-CM-SenderInfo: 51xn3trlr6x35dzhxuhorxvhhfrp/ Content-Type: text/plain; charset="utf-8" From: Yu Kuai If users specify a rdev to remove, remove_and_add_spares() will be called from sysfs/ioctl path with the parameter 'this' set to the rdev, factor out a helper remove_spare() to make code cleaner. Signed-off-by: Yu Kuai --- drivers/md/md.c | 53 +++++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/drivers/md/md.c b/drivers/md/md.c index a0c05b37d087..aea1bf7acf41 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -98,6 +98,7 @@ struct workqueue_struct *md_bitmap_wq; =20 static int remove_and_add_spares(struct mddev *mddev, struct md_rdev *this); +static void remove_spare(struct md_rdev *rdev, bool recovery); static void mddev_detach(struct mddev *mddev); static void export_rdev(struct md_rdev *rdev, struct mddev *mddev); static void md_wakeup_thread_directly(struct md_thread __rcu *thread); @@ -2976,7 +2977,7 @@ state_store(struct md_rdev *rdev, const char *buf, si= ze_t len) } else if (cmd_match(buf, "remove")) { if (rdev->mddev->pers) { clear_bit(Blocked, &rdev->flags); - remove_and_add_spares(rdev->mddev, rdev); + remove_spare(rdev, false); } if (rdev->raid_disk >=3D 0) err =3D -EBUSY; @@ -3180,7 +3181,7 @@ slot_store(struct md_rdev *rdev, const char *buf, siz= e_t len) if (rdev->mddev->pers->hot_remove_disk =3D=3D NULL) return -EINVAL; clear_bit(Blocked, &rdev->flags); - remove_and_add_spares(rdev->mddev, rdev); + remove_spare(rdev, false); if (rdev->raid_disk >=3D 0) return -EBUSY; set_bit(MD_RECOVERY_NEEDED, &rdev->mddev->recovery); @@ -7135,7 +7136,7 @@ static int hot_remove_disk(struct mddev *mddev, dev_t= dev) goto kick_rdev; =20 clear_bit(Blocked, &rdev->flags); - remove_and_add_spares(mddev, rdev); + remove_spare(rdev, false); =20 if (rdev->raid_disk >=3D 0) goto busy; @@ -9459,29 +9460,34 @@ static bool md_spares_need_change(struct mddev *mdd= ev) return false; } =20 -static bool remove_spares(struct mddev *mddev, struct md_rdev *this) +static void remove_spare(struct md_rdev *rdev, bool recovery) { - struct md_rdev *rdev; - bool removed =3D false; + struct mddev *mddev =3D rdev->mddev; =20 - rdev_for_each(rdev, mddev) { - if ((this =3D=3D NULL || rdev =3D=3D this) && rdev_removeable(rdev) && - !mddev->pers->hot_remove_disk(mddev, rdev)) { - sysfs_unlink_rdev(mddev, rdev); - rdev->saved_raid_disk =3D rdev->raid_disk; - rdev->raid_disk =3D -1; - removed =3D true; - } - } + /* Mustn't remove devices when resync thread is running */ + if (!recovery && test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) + return; =20 - if (removed) { - if (mddev->kobj.sd) - sysfs_notify_dirent_safe(mddev->sysfs_degraded); + if (!rdev_removeable(rdev) || + mddev->pers->hot_remove_disk(mddev, rdev) !=3D 0) + return; =20 - set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); - } + sysfs_unlink_rdev(mddev, rdev); + rdev->saved_raid_disk =3D rdev->raid_disk; + rdev->raid_disk =3D -1; + + if (mddev->kobj.sd) + sysfs_notify_dirent_safe(mddev->sysfs_degraded); =20 - return this && removed; + set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); +} + +static void remove_spares(struct mddev *mddev) +{ + struct md_rdev *rdev; + + rdev_for_each(rdev, mddev) + remove_spare(rdev, true); } =20 static int remove_and_add_spares(struct mddev *mddev, @@ -9494,8 +9500,7 @@ static int remove_and_add_spares(struct mddev *mddev, /* Mustn't remove devices when resync thread is running */ return 0; =20 - if (remove_spares(mddev, this)) - return 0; + remove_spares(mddev); =20 rdev_for_each(rdev, mddev) { if (this && this !=3D rdev) @@ -9534,7 +9539,7 @@ static bool md_choose_sync_action(struct mddev *mddev= , int *spares) =20 /* Check if resync is in progress. */ if (mddev->recovery_cp < MaxSector) { - remove_spares(mddev, NULL); + remove_spares(mddev); set_bit(MD_RECOVERY_SYNC, &mddev->recovery); clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery); return true; --=20 2.39.2 From nobody Mon Oct 6 03:16:00 2025 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4331922F16E; Fri, 25 Jul 2025 03:42:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753414962; cv=none; b=iDE79asoQFr5dX6g7fnnDG8DwSssJDZx6YW1sWhQibRDdE3xOJyCCq3qzstveKAieC2Cw+5LMdCdBfc8aLjkKpTUMh8bd96CuHX5DVbcrH1BXC9cN78IXAxQkDk4eOUeYnl5ael9fgMzpPuH73YAD/+pfV7TB/i09LvZI51rcRk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753414962; c=relaxed/simple; bh=KsadSjeTXuC0tvA9XZtW9NEyqKfUsGTFSnPcwTZFjmk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LwxczkwWxM5AuxsnFQ5V93YxiyuYcIfWDw1+ah8fvVve0sTJIGM4b/0rEpNP5YtTXFJ8ZOFDWWtpJ1iRio7VeAJBesBCmcReLr+EOxtNl0O3C8be6jEXj8MOlTWipGLAYygOLVbeOl76rP3upqUwIYDNlB/7BWRofdw/KX8/oic= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=none smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.216]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTPS id 4bpDGR3vRnzKHLxX; Fri, 25 Jul 2025 11:42:39 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.128]) by mail.maildlp.com (Postfix) with ESMTP id 4FD681A0F86; Fri, 25 Jul 2025 11:42:38 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.104.67]) by APP4 (Coremail) with SMTP id gCh0CgB3QBEr_YJoP+2eBQ--.51659S7; Fri, 25 Jul 2025 11:42:38 +0800 (CST) From: Yu Kuai To: song@kernel.org, yukuai3@huawei.com Cc: linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org, yukuai1@huaweicloud.com, yi.zhang@huawei.com, yangerkun@huawei.com, johnny.chenyi@huawei.com Subject: [PATCH 3/3] md: factor out a helper add_spare() Date: Fri, 25 Jul 2025 11:36:05 +0800 Message-Id: <20250725033605.3147379-4-yukuai1@huaweicloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20250725033605.3147379-1-yukuai1@huaweicloud.com> References: <20250725033605.3147379-1-yukuai1@huaweicloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: gCh0CgB3QBEr_YJoP+2eBQ--.51659S7 X-Coremail-Antispam: 1UD129KBjvJXoWxXr4rtFW7CF13Cr48Xw1xuFg_yoWrGryDpa 1ft3W5Gr4UArWfua1DWFyDGa43Gw18WrZ7try3ua4fAwnIkr1kK3WrXFyUAry5Aa9Y9F43 Aw4Utr4UCr18KF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUm214x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JrWl82xGYIkIc2 x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0 Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwCY1x0262kKe7AKxVWUAVWUtw CF04k20xvY0x0EwIxGrwCF54CYxVCY1x0262kKe7AKxVWUAVWUtwCFx2IqxVCFs4IE7xkE bVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67 AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI 42IY6xIIjxv20xvEc7CjxVAFwI0_Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMI IF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVF xhVjvjDU0xZFpf9x0JU9J5rUUUUU= X-CM-SenderInfo: 51xn3trlr6x35dzhxuhorxvhhfrp/ Content-Type: text/plain; charset="utf-8" From: Yu Kuai md-cluster will call remove_and_add_spares() to activate spare, factor out a helper add_spare() to do this directly and make code cleaner. Also remove the parameter 'this' for remove_and_add_spares(), since all callers pass in NULL now. Signed-off-by: Yu Kuai --- drivers/md/md.c | 64 +++++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/drivers/md/md.c b/drivers/md/md.c index aea1bf7acf41..841effe742cf 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -96,8 +96,6 @@ static struct workqueue_struct *md_wq; static struct workqueue_struct *md_misc_wq; struct workqueue_struct *md_bitmap_wq; =20 -static int remove_and_add_spares(struct mddev *mddev, - struct md_rdev *this); static void remove_spare(struct md_rdev *rdev, bool recovery); static void mddev_detach(struct mddev *mddev); static void export_rdev(struct md_rdev *rdev, struct mddev *mddev); @@ -9490,36 +9488,44 @@ static void remove_spares(struct mddev *mddev) remove_spare(rdev, true); } =20 -static int remove_and_add_spares(struct mddev *mddev, - struct md_rdev *this) +static bool add_spare(struct md_rdev *rdev, bool recovery) +{ + struct mddev *mddev =3D rdev->mddev; + bool spare; + + /* Mustn't add devices when resync thread is running */ + if (!recovery && test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) + return false; + + spare =3D rdev_is_spare(rdev); + if (!rdev_addable(rdev)) + return spare; + + if (!test_bit(Journal, &rdev->flags)) + rdev->recovery_offset =3D 0; + + if (mddev->pers->hot_add_disk(mddev, rdev) !=3D 0) + return spare; + + /* failure here is OK */ + sysfs_link_rdev(mddev, rdev); + if (!test_bit(Journal, &rdev->flags)) + spare =3D true; + + md_new_event(); + set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); + return spare; +} + +static int remove_and_add_spares(struct mddev *mddev) { struct md_rdev *rdev; int spares =3D 0; =20 - if (this && test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) - /* Mustn't remove devices when resync thread is running */ - return 0; - remove_spares(mddev); - - rdev_for_each(rdev, mddev) { - if (this && this !=3D rdev) - continue; - if (rdev_is_spare(rdev)) + rdev_for_each(rdev, mddev) + if (add_spare(rdev, true)) spares++; - if (!rdev_addable(rdev)) - continue; - if (!test_bit(Journal, &rdev->flags)) - rdev->recovery_offset =3D 0; - if (mddev->pers->hot_add_disk(mddev, rdev) =3D=3D 0) { - /* failure here is OK */ - sysfs_link_rdev(mddev, rdev); - if (!test_bit(Journal, &rdev->flags)) - spares++; - md_new_event(); - set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags); - } - } =20 return spares; } @@ -9550,7 +9556,7 @@ static bool md_choose_sync_action(struct mddev *mddev= , int *spares) * also removed and re-added, to allow the personality to fail the * re-add. */ - *spares =3D remove_and_add_spares(mddev, NULL); + *spares =3D remove_and_add_spares(mddev); if (*spares) { clear_bit(MD_RECOVERY_SYNC, &mddev->recovery); clear_bit(MD_RECOVERY_CHECK, &mddev->recovery); @@ -9595,7 +9601,7 @@ static void md_start_sync(struct work_struct *ws) * As we only add devices that are already in-sync, we can * activate the spares immediately. */ - remove_and_add_spares(mddev, NULL); + remove_and_add_spares(mddev); goto not_running; } =20 @@ -10118,7 +10124,7 @@ static void check_sb_changes(struct mddev *mddev, s= truct md_rdev *rdev) rdev2->saved_raid_disk =3D -1; else rdev2->saved_raid_disk =3D role; - ret =3D remove_and_add_spares(mddev, rdev2); + ret =3D add_spare(rdev2, false); pr_info("Activated spare: %pg\n", rdev2->bdev); /* wakeup mddev->thread here, so array could --=20 2.39.2