Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp903676rdh; Fri, 24 Nov 2023 00:14:52 -0800 (PST) X-Google-Smtp-Source: AGHT+IGUPCmBHxuLJ4yUVrFL9SfH1B0Ud9jnEkuw/OCb4707K8kZeAsGb8qoglIkD+6JfkTRFvrL X-Received: by 2002:a54:4885:0:b0:3b8:402c:7072 with SMTP id r5-20020a544885000000b003b8402c7072mr2306821oic.25.1700813692344; Fri, 24 Nov 2023 00:14:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700813692; cv=none; d=google.com; s=arc-20160816; b=SCpwLU8bFl/fO6MhpLBI4djwjHm1ZD4z4PqfhiYpI9EBzbbiX5nQAmYVhzQHvirIRd J+Ov3x3QTax1G+9qgCLAdcxarC7NcjhQzGjU1Kq8aPC0Jy8Iv2TXmGZ/XhMoDWwqKo8A +Z+qXgnYNsWdMYJWd9d4QpMg+0ToyC7u+tDnMTlRUrx3RabWCw0BDIjQ5jWRU6zvoeAI sXCSCS76/ORxs+GlbjhnieWcJME10Mn2/g7hX6r4ohsqYQN9Hw1vtNNxJmGtzq6Rz4+f y0L5fDGczwDxqiS9eEMQg3etZT+sagvcMl2EHThFnXZq8TbSC7oy+Ln2gn1sVjM+Yu9l +9Ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=ubTHxa5NhXZE2rY5DsxQ8bylyO4Xl6LCIPx5agqBCzY=; fh=21b3PmLu1PNv3tDaWOKoqjG180Kpof/kg3VrmUdddqQ=; b=ffqCgVx7yBWb372ubfG7WK9mW3VP5lYDNhta4g+fuTZHgBE48G97flY9YjiiEj44+7 BvQiR7+tdRNgZCVDhBFtd00xQfaUHuJI784+Mz5xImppE1Gd2BDVKITnWWC4HqjdZ2ha TltOlFnvBGM4YnqnRkiQAznov+lNTXKJFRTc+zsI1GbKn3G9AmeMw1ghTDNBQ2c/kKHH p/lPR5d6Fm3+kpdPG2AWaQHLoj8GBr7N9YKRt+8kI4nHW9lPjnm0gDbeKxGifehWZMKy bKUOz8HPVWyly8tepqvu2+qHRYeJ2aZYG57jYQnM+4MAo5xyKTaeaviRd9ZAxW7nKe+n 2vww== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=tSFjxlsV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id h13-20020a63df4d000000b005657ba564bdsi3031921pgj.826.2023.11.24.00.14.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Nov 2023 00:14:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=tSFjxlsV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id C8B06821ADB1; Fri, 24 Nov 2023 00:14:50 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344525AbjKXIOj (ORCPT + 99 others); Fri, 24 Nov 2023 03:14:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33346 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235288AbjKXIOW (ORCPT ); Fri, 24 Nov 2023 03:14:22 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B044210FB for ; Fri, 24 Nov 2023 00:14:05 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5A708C433C8; Fri, 24 Nov 2023 08:14:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700813645; bh=yY7r0NmTSZjwOmhPQa1HduXqguztxuo72o3wVU0BM/8=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=tSFjxlsV4uUVdscw2Un4otEoKDU8EHh/lJWjPTYF1X81EbiWZaKqCJ0fB2QoYv0wY dZ2ae0GtK3jH6bDEZlBDTlDBv0cgtcxK3KuMSAT7SBXyOIZXbLXqAl+b2QQwnO57lY l3cK0ykmmlHxNSRichzloioBCm16fpJyIIMcN/TxRboVjCtZj6SKyxk/qz/AiEgrY9 5IxuIAaocEqD7y3lCunXXMei/7QSlvd+/xFzSO697iKFUgIKGwX9nAR9DAqEJyuplV BIkFmd4f7V8Ve0QKWOlhlRVHPSIox/SjBrvLRpudL6AGKfwR/i0EgqmdRtq3G83Bnn Rn+m+2BA8RHHA== Received: by mail-lf1-f45.google.com with SMTP id 2adb3069b0e04-507962561adso2468390e87.0; Fri, 24 Nov 2023 00:14:05 -0800 (PST) X-Gm-Message-State: AOJu0YzB8y7ZDCjmZwalUhyE6DV/5gkB7SyCjXVHuUh35iNrcgisp8P9 /MCO1G/r5jBKTtSX3dBTOVF2vuAUt+PCQjE/pG8= X-Received: by 2002:a19:6415:0:b0:504:4165:54ab with SMTP id y21-20020a196415000000b00504416554abmr946580lfb.56.1700813643560; Fri, 24 Nov 2023 00:14:03 -0800 (PST) MIME-Version: 1.0 References: <20231021102059.3198284-1-yukuai1@huaweicloud.com> In-Reply-To: <20231021102059.3198284-1-yukuai1@huaweicloud.com> From: Song Liu Date: Fri, 24 Nov 2023 00:13:50 -0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH -next v2 0/6] md: remove rcu protection to access rdev from conf To: Yu Kuai Cc: linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org, yukuai3@huawei.com, yi.zhang@huawei.com, yangerkun@huawei.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-4.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, 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 X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Fri, 24 Nov 2023 00:14:50 -0800 (PST) On Fri, Oct 20, 2023 at 7:25=E2=80=AFPM Yu Kuai w= rote: > > From: Yu Kuai > > The lifetime of rdev: > > 1. md_import_device() generate a rdev based on underlying disk; > > mddev_lock() > rdev =3D kzalloc(); > rdev->bdev =3D blkdev_get_by_dev(); > mddev_unlock() > > 2. bind_rdev_to_array() add this rdev to mddev->disks; > > mddev_lock() > kobject_add(&rdev->kobj, &mddev->kobj, ...); > list_add_rcu(&rdev->same_set, &mddev->disks); > mddev_unlock() > > 3. remove_and_add_spares() add this rdev to conf; > > mddev_lock() > rdev_addable(); > pers->hot_add_disk(); > rcu_assign_pointer(conf->rdev, rdev); > mddev_unlock() > > 4. Use this array with rdev; > > 5. remove_and_add_spares() remove rdev from conf; > > mddev_lock() > // triggered by sysfs/ioctl > rdev_removeable(); > pers->hot_remove_disk(); > rcu_assign_pointer(conf->rdev, NULL); > synchronize_rcu(); > mddev_unlock() > > // triggered by daemon > mddev_lock() > rdev_removeable(); > synchronize_rcu(); -> this can't protect accessing rdev from conf > pers->hot_remove_disk(); > rcu_assign_pointer(conf->rdev, NULL); > mddev_unlock() > > 6. md_kick_rdev_from_array() remove rdev from mddev->disks; > > mddev_lock() > list_del_rcu(&rdev->same_set); > synchronize_rcu(); > list_add(&rdev->same_set, &mddev->deleting) > mddev_unlock() > export_rdev > > There are two separate rcu protection for rdev, and this pathset remove > the protection of conf(step 3 and 5), because it's safe to access rdev > from conf in following cases: > > - If 'reconfig_mutex' is held, because rdev can't be added or rmoved to > conf; > - If there is normal IO inflight, because mddev_suspend() will wait for > IO to be done and prevent rdev to be added or removed to conf; > - If sync thread is running, because remove_and_add_spares() can only be > called from daemon thread when sync thread is done, and > 'MD_RECOVERY_RUNNING' is also checked for ioctl/sysfs; > - if any spinlock or rcu_read_lock() is held, because synchronize_rcu() > from step 6 prevent rdev to be freed until spinlock is released or > rcu_read_unlock(); Thanks for the cover letter. Song > > Yu Kuai (6): > md: remove useless debug code to print configuration > md: remove flag RemoveSynchronized > md/raid1: remove rcu protection to access rdev from conf > md/raid10: remove rcu protection to access rdev from conf > md/raid5: remove rcu protection to access rdev from conf > md/md-multipath: remove rcu protection to access rdev from conf > > drivers/md/md-multipath.c | 29 ++--- > drivers/md/md.c | 37 +----- > drivers/md/raid1.c | 94 ++++----------- > drivers/md/raid10.c | 248 +++++++++----------------------------- > drivers/md/raid5-cache.c | 11 +- > drivers/md/raid5-ppl.c | 16 +-- > drivers/md/raid5.c | 225 ++++++++++------------------------ > drivers/md/raid5.h | 4 +- > 8 files changed, 163 insertions(+), 501 deletions(-) > > -- > 2.39.2 >