Received: by 2002:a05:7412:b995:b0:f9:9502:5bb8 with SMTP id it21csp7714704rdb; Thu, 4 Jan 2024 05:39:30 -0800 (PST) X-Google-Smtp-Source: AGHT+IHGtEeoJQZFWpy2nobbeqqugVhKWruG37Ih4U+xozev3Iy/V3mciV4TktGfN9oGTDrfOnzX X-Received: by 2002:a05:620a:1444:b0:781:5d3a:7330 with SMTP id i4-20020a05620a144400b007815d3a7330mr582550qkl.90.1704375570235; Thu, 04 Jan 2024 05:39:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704375570; cv=none; d=google.com; s=arc-20160816; b=HKIXya9mu3+JVIQLREp+WCjsCSRVXEIob6KfVEAKunb8rKmHzNuxcUZntZWRTyW9Y4 R8TMzppUwrSS2KYxAgR2ziKd+/08FIqhenUVvEhzvYSMcDpUtImxAcxs+ts2E1RHWWEh ZRDSBxC7sLHxg4DTYD/x2XE+l54J51eUuDl1hPo6QOcwIB8UIokNqhNxATn09WSg/FCG D870hucf/0TBFl2pMf8FIFqqxvw6Xj5Rr/60jCFzQzyArcnHq8I7Tzhmp2Xo8y53X7f+ sxpAX5c7CGN3j+X12ZIfs6YjEGRucMgM1AphpVaAXxV1rfXyg7HJO+xA/Zy3gw+5lHUl aVrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from; bh=06c2P3AWHFzMsgQC22CL/91+jy1wSMtNZfIAsqpvAZg=; fh=3ZmeJOpnfsMSSYmYD/y39IA9hrJbg4pNgHK+mEfSZ5U=; b=eE0OX5mYJrx8IUaZk7bSC5aJIs7Qw3pxQqK7b4r9Hq1Wm1VdGy1JUZd/mw+fMr+M4N z2fj5pI/f90AfStZLSJ0IG5PJgFiBRymUiI20FKU9r4LHArllmu31mKytFLpu1C4CJLF zxuxTbTOi0Za7obB2fPUSrgQU+aZxfewlQLzEglz8gFucg68LevGBDNC6AwV10d5sX1a kfMq1r/MOQe/gUToV8hU/fE+0ffUzOrA8EdeJXxxZTbZ4aDw9LFdEUv/FLerqrQJpSF3 oENVFR5mG0YHGliZm/i6exObh2Iv26YElTQHA9IpgHO89wKJpFkNXBm25km/e86iBL3O BWwQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-16709-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-16709-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id c28-20020a05620a201c00b0078157671738si19518315qka.219.2024.01.04.05.39.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Jan 2024 05:39:30 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-16709-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-16709-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-16709-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 0217A1C23EC8 for ; Thu, 4 Jan 2024 13:39:30 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C6C8122339; Thu, 4 Jan 2024 13:39:21 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org 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 E72E82232E; Thu, 4 Jan 2024 13:39:18 +0000 (UTC) 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.235]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4T5SNw0Sxjz4f3jM1; Thu, 4 Jan 2024 21:39:12 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.112]) by mail.maildlp.com (Postfix) with ESMTP id 5FDF91A026E; Thu, 4 Jan 2024 21:39:15 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.104.67]) by APP1 (Coremail) with SMTP id cCh0CgDn6hACtZZlhgMKFg--.12033S4; Thu, 04 Jan 2024 21:39:15 +0800 (CST) From: Li Lingfeng To: song@kernel.org Cc: linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org, yukuai3@huawei.com, yukuai1@huaweicloud.com, linan122@huawei.com, yi.zhang@huawei.com, yangerkun@huawei.com, lilingfeng@huaweicloud.com, lilingfeng3@huawei.com Subject: [PATCH] md: use RCU lock to protect traversal in md_spares_need_change() Date: Thu, 4 Jan 2024 21:36:29 +0800 Message-Id: <20240104133629.1277517-1-lilingfeng@huaweicloud.com> X-Mailer: git-send-email 2.39.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID:cCh0CgDn6hACtZZlhgMKFg--.12033S4 X-Coremail-Antispam: 1UD129KBjvJXoW7WFyxKr1DZr1DZFWfJryxXwb_yoW8JF4xpF s2gFy5uw48X3yrGa45uF95WF1rXw1rKFWjyF97C3y8Z3WDAr1qkry3K390qrZ5GFyIyFyj q3W2va1ku3W3AFJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUv014x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gc CE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E 2Ix0cI8IcVAFwI0_JrI_JrylYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJV W8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lFIxGxcIEc7CjxVA2 Y2ka0xkIwI1l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4 xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r1q6r43 MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I 0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVW3JVWrJr1lIxAIcVC2z280aVAFwI0_ Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2KfnxnUUI43ZEXa7VU1 a9aPUUUUU== X-CM-SenderInfo: polox0xjih0w46kxt4xhlfz01xgou0bp/ From: Li Lingfeng Since md_start_sync() will be called without the protect of mddev_lock, and it can run concurrently with array reconfiguration, traversal of rdev in it should be protected by RCU lock. Commit bc08041b32ab ("md: suspend array in md_start_sync() if array need reconfiguration") added md_spares_need_change() to md_start_sync(), casusing use of rdev without any protection. Fix this by adding RCU lock in md_spares_need_change(). Fixes: bc08041b32ab ("md: suspend array in md_start_sync() if array need reconfiguration") Signed-off-by: Li Lingfeng --- drivers/md/md.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/md/md.c b/drivers/md/md.c index 9bdd57324c37..902b43b65052 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -9228,9 +9228,14 @@ static bool md_spares_need_change(struct mddev *mddev) { struct md_rdev *rdev; - rdev_for_each(rdev, mddev) - if (rdev_removeable(rdev) || rdev_addable(rdev)) + rcu_read_lock(); + rdev_for_each_rcu(rdev, mddev) { + if (rdev_removeable(rdev) || rdev_addable(rdev)) { + rcu_read_unlock(); return true; + } + } + rcu_read_unlock(); return false; } -- 2.31.1