From patchwork Mon May 29 03:10:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu Kuai X-Patchwork-Id: 99953 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp1257784vqr; Sun, 28 May 2023 20:36:29 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4ZhR2Rr+aMdzW9I03pgze8DNXY/6dl0QVLd9xipGQzzm//ISZ5+9ePwGuCbrpqIu+KAMK9 X-Received: by 2002:a17:902:e5c3:b0:1a6:8ed5:428a with SMTP id u3-20020a170902e5c300b001a68ed5428amr11425913plf.22.1685331388747; Sun, 28 May 2023 20:36:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685331388; cv=none; d=google.com; s=arc-20160816; b=RkQWCqQ6QnnP0Au8F0hPXaRrl2tA6OhxMCq7zkHA8ZD1DSf7qGlWQ4lT+sw96UWKta tpJbOhGtrkjko1uQXX2GwVQBu5JmNEbcUGQSVc9ydAI2ZlS/T4Nm0h0dyHGavVi0qmX3 1BsAuIHWQwj5iXnIyh8F/aYtY0HtT7ZIMNx75rbtJOkvSlPQ9LwnL69ZTEsQzMTY1wxW krhhqRL9Z6By2wbFP8mjdgzEP1w/Ulix8oL/JuEbTz02xU6qMbFwv30F6nvZeB2V1V4u IgehT5OK3RFJ2oy0c03D1Qmn/35r2HBh/1OFs0SlFX0BlsoR9sjDxTtPIZVXYquPMGnG RGiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=g+EOPPQIByeG+zI3Zl7tjlHhO/84QxwNDFzvuP/B0ZY=; b=L3lHg6OQ5yUWQq91J8FS5/A+wUSG/p8Mc5nAOLP5kLBbzNzdE+Jnfk68jredqgi3o7 LFwVBjKITUGe+Ljh03q3KySCGcjg1Tm/Yi8xrRmHqHhZP1R4g2O/VsMQzdmJkGpWHa9n VHHQMiuxYpsInitvx94T8SVcn2UO3fIQZZaMVVKadLwgpoNnJbY9OnppyPHTJ09Sssc3 UVj3rGtcZFKWINfz1lMUOh0pvZ/QKu1YpbfVO797W4U4QLRiU4wx3YqLzLUJrMmPyXZF Aow5PBivPzTaE1iY5s5VfzlFdvI0I0uCQkvTONuJjcbEk1abCElKWyiNqzBTSrcD04XK GhGA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t9-20020a170902bc4900b001ac7ea55768si4965346plz.499.2023.05.28.20.36.13; Sun, 28 May 2023 20:36:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229609AbjE2DOa (ORCPT + 99 others); Sun, 28 May 2023 23:14:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60678 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229453AbjE2DO1 (ORCPT ); Sun, 28 May 2023 23:14:27 -0400 Received: from dggsgout11.his.huawei.com (unknown [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 72514AF; Sun, 28 May 2023 20:14:25 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.153]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4QV0xS5cszz4f3jJG; Mon, 29 May 2023 11:14:20 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.104.67]) by APP4 (Coremail) with SMTP id gCh0CgBn0LOMGHRkx1PJKQ--.20684S4; Mon, 29 May 2023 11:14:21 +0800 (CST) From: Yu Kuai To: song@kernel.org Cc: linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org, yukuai3@huawei.com, yukuai1@huaweicloud.com, yi.zhang@huawei.com, yangerkun@huawei.com Subject: [PATCH -next] md/raid5: don't allow concurrent reshape with recovery Date: Mon, 29 May 2023 11:10:45 +0800 Message-Id: <20230529031045.1760883-1-yukuai1@huaweicloud.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-CM-TRANSID: gCh0CgBn0LOMGHRkx1PJKQ--.20684S4 X-Coremail-Antispam: 1UD129KBjvJXoW7uFWUKr17AFy8KFy5Kw1fCrg_yoW8Gw45pa 9FkFn8ur4UZw4aqF4DC34DCa4Ykr48JrWftFy3Xw1rA3ZxJryxu3yrGFW5KF1UJFWFqan0 vr1rJrWDCrW2k3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUyK14x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gc CE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E 2Ix0cI8IcVAFwI0_Jr0_Jr4lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJV W8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1l42xK82IYc2Ij64vI r41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8Gjc xK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r1DMIIYrxkI7VAKI48JMIIF0xvE2Ix0 cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMIIF0xvE42xK8V AvwI8IcIk0rVWrJr0_WFyUJwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF 7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjfUoOJ5UUUUU X-CM-SenderInfo: 51xn3trlr6x35dzhxuhorxvhhfrp/ X-CFilter-Loop: Reflected X-Spam-Status: No, score=-0.5 required=5.0 tests=BAYES_00,KHOP_HELO_FCRDNS, MAY_BE_FORGED,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1767198046027577124?= X-GMAIL-MSGID: =?utf-8?q?1767198046027577124?= From: Yu Kuai commit 0aecb06e2249 ("md/raid5: don't allow replacement while reshape is in progress") fix that replacement can be set if reshape is interrupted, which will cause that array can't be assemebled. There is a similar on the other side, if recovery is interrupted, then reshape can start, which will cause the same problem. Fix the prblem by don't start reshape is recovery is still in progress. Signed-off-by: Yu Kuai --- drivers/md/raid5.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 64865f9dd3f5..6db783ca71b7 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -8500,6 +8500,7 @@ static int raid5_start_reshape(struct mddev *mddev) struct r5conf *conf = mddev->private; struct md_rdev *rdev; int spares = 0; + int i; unsigned long flags; if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) @@ -8511,6 +8512,13 @@ static int raid5_start_reshape(struct mddev *mddev) if (has_failed(conf)) return -EINVAL; + /* raid5 can't handle concurrent reshape and recovery */ + if (mddev->recovery_cp < MaxSector) + return -EBUSY; + for (i = 0; i < conf->raid_disks; i++) + if (rdev_mdlock_deref(mddev, conf->disks[i].replacement)) + return -EBUSY; + rdev_for_each(rdev, mddev) { if (!test_bit(In_sync, &rdev->flags) && !test_bit(Faulty, &rdev->flags))