From patchwork Wed Mar 15 06:18:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu Kuai X-Patchwork-Id: 70016 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp2167437wrd; Tue, 14 Mar 2023 23:33:46 -0700 (PDT) X-Google-Smtp-Source: AK7set+hCmULhR1wbDoWHrb+CS7btFv7XiX++xj+sQwzHgB7UmY+rfLSQ3i+3hQMS2OJ0Am/g67L X-Received: by 2002:a05:6a20:bb11:b0:d0:76e3:16e5 with SMTP id fc17-20020a056a20bb1100b000d076e316e5mr6029738pzb.2.1678862026604; Tue, 14 Mar 2023 23:33:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1678862026; cv=none; d=google.com; s=arc-20160816; b=Gmzs7OTup0OJ9UgI5dhhNRsOa6bKiteWH6PW2NxpIEMLP/r6EUVB4HqgZ0hwM3OT2w 2W1mn+qYsYMShZ7+s3zhnX1bu+Zu5cwIu1txnfGw+P4c4DVlVp4HH9F1XT+b3QsPL2SZ B0HdiWj3Teo0WYTWXSzQ4NZkIGeNRCgJF2uITVQJfX82zonHUNkbdsdnpb0F5d7qWrL5 i9tIIT9P1w9EAyEseLne8Y18fuHRdE6gLwi4Lwr3/UtRJhVVwYjfojhZL/XrbU3SJtw9 WfIvsBIlK7quxI/QTYMatcx0Up2BP7f+feybmSrrlTvjilGVXB6SozlZ0NixbBHbP32a IoJw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=MN0kuiBa5PoDBZH7ZP40MQmaE4bnSYY7LNTO/azGFRo=; b=coGB52AFTsT8/HkWMEGMAR7GxMWXv+q0kuEchVloeBkvRUoFVV3TpMZVjhzU/5UTz3 +WlM/3Ho9f9f0709RgCJ9ZPr8h+/lVKAerXdw4kBo9z4J0rMYHsJXTVE3XJR/haOXftx qoXEz6BeC9I9lzUWy1trX6m1RjziDwHYkXz37rtWyB3tvDMDBY6WE1tuzcOJMZd+gp/t 7cOSNvUOczwJTswVsug2Fp/KBo05JTMiEguCr1MT49xVmMcZaLePutxu3wmq87H8jfS/ z4gDWR9rn0urty/COQ+nGjHW/REoud4+efVCY89RPuWW28N6YQRRY4ZFjyh+nx0w46c5 rL3g== 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 j5-20020a625505000000b0062546bebbecsi4159899pfb.31.2023.03.14.23.33.34; Tue, 14 Mar 2023 23:33: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 S231226AbjCOGTM (ORCPT + 99 others); Wed, 15 Mar 2023 02:19:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52164 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230458AbjCOGTC (ORCPT ); Wed, 15 Mar 2023 02:19:02 -0400 Received: from dggsgout11.his.huawei.com (unknown [45.249.212.51]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E4E4B24C8B; Tue, 14 Mar 2023 23:18:59 -0700 (PDT) Received: from mail02.huawei.com (unknown [172.30.67.169]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4Pc0b32hBSz4f4P1g; Wed, 15 Mar 2023 14:18:55 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.127.227]) by APP3 (Coremail) with SMTP id _Ch0CgCnUyFNYxFklvvMEw--.20241S8; Wed, 15 Mar 2023 14:18:57 +0800 (CST) From: Yu Kuai To: agk@redhat.com, snitzer@kernel.org, song@kernel.org Cc: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, yukuai3@huawei.com, yukuai1@huaweicloud.com, yi.zhang@huawei.com, yangerkun@huawei.com Subject: [PATCH v2 4/5] md: pass a mddev to md_unregister_thread() Date: Wed, 15 Mar 2023 14:18:09 +0800 Message-Id: <20230315061810.653263-5-yukuai1@huaweicloud.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20230315061810.653263-1-yukuai1@huaweicloud.com> References: <20230315061810.653263-1-yukuai1@huaweicloud.com> MIME-Version: 1.0 X-CM-TRANSID: _Ch0CgCnUyFNYxFklvvMEw--.20241S8 X-Coremail-Antispam: 1UD129KBjvJXoW3XF4fKw4kWw4rKrW5JF15XFb_yoW3JrWUp3 yrWFy3Ar4FvrW3Zr4DJayDuay5Z3WIqFWqyryfC34rW3WfGrW5GFyY9FyDZr1DZa4rAr43 ta15KF48ZFWvgr7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUU9C14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4U M4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwCF04k20xvY0x0EwIxGrw CFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE 14v26r106r1rMI8E67AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2 IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Gr0_Cr1lIxAIcVCF04k26cxK x2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI 0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUQSdkUUUUU= 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 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?1760414428262593926?= X-GMAIL-MSGID: =?utf-8?q?1760414428262593926?= From: Yu Kuai Prepare to use a disk level spinlock to protect md_thread, there are no functional changes. Signed-off-by: Yu Kuai --- drivers/md/dm-raid.c | 2 +- drivers/md/md-cluster.c | 8 ++++---- drivers/md/md.c | 13 +++++++------ drivers/md/md.h | 3 ++- drivers/md/raid1.c | 4 ++-- drivers/md/raid10.c | 2 +- drivers/md/raid5-cache.c | 2 +- drivers/md/raid5.c | 2 +- 8 files changed, 19 insertions(+), 17 deletions(-) diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c index 257c9c9f2b4d..1393c80b083b 100644 --- a/drivers/md/dm-raid.c +++ b/drivers/md/dm-raid.c @@ -3729,7 +3729,7 @@ static int raid_message(struct dm_target *ti, unsigned int argc, char **argv, if (!strcasecmp(argv[0], "idle") || !strcasecmp(argv[0], "frozen")) { if (mddev->sync_thread) { set_bit(MD_RECOVERY_INTR, &mddev->recovery); - md_unregister_thread(&mddev->sync_thread); + md_unregister_thread(&mddev->sync_thread, mddev); md_reap_sync_thread(mddev); } } else if (decipher_sync_action(mddev, mddev->recovery) != st_idle) diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c index 85fbcf5bae27..064211fe9830 100644 --- a/drivers/md/md-cluster.c +++ b/drivers/md/md-cluster.c @@ -946,8 +946,8 @@ static int join(struct mddev *mddev, int nodes) return 0; err: set_bit(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state); - md_unregister_thread(&cinfo->recovery_thread); - md_unregister_thread(&cinfo->recv_thread); + md_unregister_thread(&cinfo->recovery_thread, mddev); + md_unregister_thread(&cinfo->recv_thread, mddev); lockres_free(cinfo->message_lockres); lockres_free(cinfo->token_lockres); lockres_free(cinfo->ack_lockres); @@ -1009,8 +1009,8 @@ static int leave(struct mddev *mddev) resync_bitmap(mddev); set_bit(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state); - md_unregister_thread(&cinfo->recovery_thread); - md_unregister_thread(&cinfo->recv_thread); + md_unregister_thread(&cinfo->recovery_thread, mddev); + md_unregister_thread(&cinfo->recv_thread, mddev); lockres_free(cinfo->message_lockres); lockres_free(cinfo->token_lockres); lockres_free(cinfo->ack_lockres); diff --git a/drivers/md/md.c b/drivers/md/md.c index 4ecfd0508afb..ab9299187cfe 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -4775,7 +4775,8 @@ action_store(struct mddev *mddev, const char *page, size_t len) mddev_unlock(mddev); set_bit(MD_RECOVERY_INTR, &mddev->recovery); - md_unregister_thread(&mddev->sync_thread); + md_unregister_thread(&mddev->sync_thread, + mddev); mddev_lock_nointr(mddev); /* * set RECOVERY_INTR again and restore reshape @@ -6175,7 +6176,7 @@ static void __md_stop_writes(struct mddev *mddev) flush_workqueue(md_misc_wq); if (mddev->sync_thread) { set_bit(MD_RECOVERY_INTR, &mddev->recovery); - md_unregister_thread(&mddev->sync_thread); + md_unregister_thread(&mddev->sync_thread, mddev); md_reap_sync_thread(mddev); } @@ -6215,7 +6216,7 @@ static void mddev_detach(struct mddev *mddev) mddev->pers->quiesce(mddev, 1); mddev->pers->quiesce(mddev, 0); } - md_unregister_thread(&mddev->thread); + md_unregister_thread(&mddev->thread, mddev); if (mddev->queue) blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/ } @@ -7933,7 +7934,7 @@ int md_register_thread(struct md_thread **threadp, } EXPORT_SYMBOL(md_register_thread); -void md_unregister_thread(struct md_thread **threadp) +void md_unregister_thread(struct md_thread **threadp, struct mddev *mddev) { struct md_thread *thread; @@ -9324,7 +9325,7 @@ void md_check_recovery(struct mddev *mddev) * ->spare_active and clear saved_raid_disk */ set_bit(MD_RECOVERY_INTR, &mddev->recovery); - md_unregister_thread(&mddev->sync_thread); + md_unregister_thread(&mddev->sync_thread, mddev); md_reap_sync_thread(mddev); clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery); clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery); @@ -9360,7 +9361,7 @@ void md_check_recovery(struct mddev *mddev) goto unlock; } if (mddev->sync_thread) { - md_unregister_thread(&mddev->sync_thread); + md_unregister_thread(&mddev->sync_thread, mddev); md_reap_sync_thread(mddev); goto unlock; } diff --git a/drivers/md/md.h b/drivers/md/md.h index aeb2fc6b65c7..8f4137ad2dde 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h @@ -733,7 +733,8 @@ extern void md_cluster_stop(struct mddev *mddev); int md_register_thread(struct md_thread **threadp, void (*run)(struct md_thread *thread), struct mddev *mddev, const char *name); -extern void md_unregister_thread(struct md_thread **threadp); +extern void md_unregister_thread(struct md_thread **threadp, + struct mddev *mddev); extern void md_wakeup_thread(struct md_thread **threadp, struct mddev *mddev); extern void md_check_recovery(struct mddev *mddev); extern void md_reap_sync_thread(struct mddev *mddev); diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 391ff239c711..8329a1ba9d12 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -3158,7 +3158,7 @@ static int raid1_run(struct mddev *mddev) * RAID1 needs at least one disk in active */ if (conf->raid_disks - mddev->degraded < 1) { - md_unregister_thread(&conf->thread); + md_unregister_thread(&conf->thread, mddev); ret = -EINVAL; goto abort; } @@ -3185,7 +3185,7 @@ static int raid1_run(struct mddev *mddev) ret = md_integrity_register(mddev); if (ret) { - md_unregister_thread(&mddev->thread); + md_unregister_thread(&mddev->thread, mddev); goto abort; } return 0; diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 920e5722040f..47d18d56000e 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -4293,7 +4293,7 @@ static int raid10_run(struct mddev *mddev) return 0; out_free_conf: - md_unregister_thread(&mddev->thread); + md_unregister_thread(&mddev->thread, mddev); raid10_free_conf(conf); mddev->private = NULL; out: diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c index d6ee6a7a83b7..588c3d1f7467 100644 --- a/drivers/md/raid5-cache.c +++ b/drivers/md/raid5-cache.c @@ -3166,7 +3166,7 @@ void r5l_exit_log(struct r5conf *conf) /* Ensure disable_writeback_work wakes up and exits */ wake_up(&conf->mddev->sb_wait); flush_work(&log->disable_writeback_work); - md_unregister_thread(&log->reclaim_thread); + md_unregister_thread(&log->reclaim_thread, conf->mddev); conf->log = NULL; diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 2c0695d41436..b9f2688b141f 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -8070,7 +8070,7 @@ static int raid5_run(struct mddev *mddev) return 0; abort: - md_unregister_thread(&mddev->thread); + md_unregister_thread(&mddev->thread, mddev); print_raid5_conf(conf); free_conf(conf); mddev->private = NULL;