Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp3165939rwd; Mon, 29 May 2023 06:40:46 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4632faFqxvhgmZve6dGZJQJ/jOk/IoNDmQTGcZEq91LIHt/4fQGi/JAIQZZ7lkRAxZAl4B X-Received: by 2002:a05:6a20:9f43:b0:10d:f812:e4b5 with SMTP id ml3-20020a056a209f4300b0010df812e4b5mr8373977pzb.35.1685367646375; Mon, 29 May 2023 06:40:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685367646; cv=none; d=google.com; s=arc-20160816; b=cII4wrWhpZbhSRdkBGW8xrIhbZ2EoVW3ApPxYPE26udIQOSLFVY2qcQRNm7lfiqvHZ oS+BGSuFE4yUITGbjGNReTxXETPUhX8iskmw5DCwH51lH+A22ZRC4aYE4E1hLBRfQaQ0 zkmEbHEGyYdca6z0pqBf05EoxuAMngKRafZP3YbM1zmipjgs3Nn0q+lszQEMYGiJ9dhJ 8Fz9DSI9xTMmj/n8bDhV302SKiLuAqBVvHrDRqagt/XVnEvrSGrhNNesnlqthi0oM39Q BvU07/AyT05KyqBJlFIsy8Vrrdx/k2ULzecf6KQP6kxIFq9PjyukiKaVesZHFzD7H0Ky N/og== 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=mRNIJmxsQEgbIhDI69eR/504bG3+f1kBLaz9aoVio7Q=; b=BCu5ucl162xpUwl9iophHZwfq1EpEfzee4XiSSq/gXTTRbjMimm478EXAnUb8rkh1k zm6rBIBd6DFjziRwniw/YpXe64I0arUwDYSntS/lLw/FmlgkTpJTesR58RYwpv0WbQk/ k+cSOW3D+VMv86NRpcRs0DhAWlW+stL+Rc0jFc73JDwUU9ZGVw8ho/zdSYMFDT3al+Sq FXrsCvoluXZnhTY/AihYIoJYW4Dg8n7kzscp05Agp5BopoIThcEEgBXI1e4JE0U4eAa7 HZEWSdFwS8lzHObtaxZfktcc3dGRbqkHdzLFLStJ7r3a3cC/Z9FND4t+96QtBegkSEA2 Bc9A== 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x19-20020a63b213000000b0053f3e25b944si8264245pge.749.2023.05.29.06.40.34; Mon, 29 May 2023 06:40:46 -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 S229870AbjE2Nhw (ORCPT + 99 others); Mon, 29 May 2023 09:37:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55976 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229536AbjE2Nhv (ORCPT ); Mon, 29 May 2023 09:37:51 -0400 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D802C94; Mon, 29 May 2023 06:37:49 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.153]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4QVGmn2zSLz4f3jY8; Mon, 29 May 2023 21:37:45 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.104.67]) by APP4 (Coremail) with SMTP id gCh0CgD3X7OqqnRk+gDpKQ--.35039S4; Mon, 29 May 2023 21:37:47 +0800 (CST) From: Yu Kuai To: song@kernel.org, pmenzel@molgen.mpg.de 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 v2] md/raid5: don't allow concurrent reshape with recovery Date: Mon, 29 May 2023 21:34:10 +0800 Message-Id: <20230529133410.2125914-1-yukuai1@huaweicloud.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: gCh0CgD3X7OqqnRk+gDpKQ--.35039S4 X-Coremail-Antispam: 1UD129KBjvJXoW7Cry3uFykXrykGr4rtF4DCFg_yoW8XF1fpa 93KFs8ur4UZw1akF4DA34DCFyY9FWDtrWrtFy3X34Fy3ZIqrWxuayrGFW5KryUJFWSqw4Y vw45JryDCry2kaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUyK14x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gc CE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E 2Ix0cI8IcVAFwI0_Jrv_JF1lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJV W8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1l42xK82IYc2Ij64vI r41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8Gjc xK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r1q6r43MIIYrxkI7VAKI48JMIIF0xvE2Ix0 cI8IcVAFwI0_Gr0_Xr1lIxAIcVC0I7IYx2IY6xkF7I0E14v26r4UJVWxJr1lIxAIcVCF04 k26cxKx2IYs7xG6r4j6FyUMIIF0xvEx4A2jsIE14v26r4j6F4UMIIF0xvEx4A2jsIEc7Cj xVAFwI0_Gr1j6F4UJbIYCTnIWIevJa73UjIFyTuYvjfUouWlDUUUU X-CM-SenderInfo: 51xn3trlr6x35dzhxuhorxvhhfrp/ X-CFilter-Loop: Reflected X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 From: Yu Kuai Commit 0aecb06e2249 ("md/raid5: don't allow replacement while reshape is in progress") fixes that replacement can be set if reshape is interrupted, which will cause that array can't be assembled. There is a similar problem on the other side, if recovery is interrupted, then reshape can start, which will cause the same problem. Fix the problem by not starting to reshape while recovery is still in progress. Signed-off-by: Yu Kuai --- Changes in v2: - fix some typo in commit message. drivers/md/raid5.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 8686d629e3f2..6615abf54d3f 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -8525,6 +8525,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)) @@ -8536,6 +8537,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)) -- 2.39.2