Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp253401iob; Thu, 28 Apr 2022 01:21:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwoRTPUOpnvS1Uc3gKYBEXeMe99WPpS+svnWM17NNTpQzzMTMZIBa7bd9KblUdB/tp+gEHs X-Received: by 2002:a05:6402:3711:b0:425:d3d6:2b65 with SMTP id ek17-20020a056402371100b00425d3d62b65mr27757716edb.328.1651134081658; Thu, 28 Apr 2022 01:21:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651134081; cv=none; d=google.com; s=arc-20160816; b=CB+d6UEHhfwKzd7VGO79i3kJg3KqUPIQscRXXmlYJ2ZI4ty+xtrKXXfQyaPN1iXEgr W6K4DzDZ070+t1MWTX+s5eCNCaj2QHYd+4/ZrYLJ1sSGi1vKVGHhYdF3t95rUp2JetHC 796baiDRr45oP0B5JdwbcTkl4dwMEdJLMlEhv3oJSQA1y9Vn/jqhW1gC6AoZDSLKv8Iu 10OdfIqBABbAiK451c+W69FeJQP8xnHBBYLQwchupnprQqOYmmWdmVPGY/z/AiyKPSPo OIOJPbyG3uF95d19zVShrMIZe5zg4wNj9mdHx84D70ovNUHVShPlLbaXXb6MionKsTh2 UR6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dkim-signature; bh=ZHF0ZEcmwBF0j3tPf+RFP5tVLnosrhzjMKfJfPBOHcA=; b=cliZtBo6TfBQTfI0uk3b0wo3OMDi0ZavlOnad+ANCJ5mPrXgE2Dai54sM3MvG3lWTc 2qChUQNkF4T4L0DXcBRU3PAGPcfW8hFz2w17XJg6Iv0P8hWIY+Xx3vgc2VMUq0arARj1 Lhylm1wOFdBJ0iZN6tJ9mgEUpwP0cks0xyAdQ8Tyl6S7csZruINku2PcTkzd878UAB5W 726rULBdrL+BTMVBPHuGO0lvmGnXKZPPDcO4grzhO41+0ihQjqGglc5d1HulVqfU9SQP zI9SbnNrQvhqxxZoOkgiqWI6RLM3mlCvaWFKQi+H6F+eqowM9cVxs2Qk/Y6PDkREwvZO //gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2021-07-09 header.b=GMwcfPXC; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c2-20020a170906924200b006f38efefa6dsi2835577ejx.764.2022.04.28.01.20.56; Thu, 28 Apr 2022 01:21:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-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; dkim=pass header.i=@oracle.com header.s=corp-2021-07-09 header.b=GMwcfPXC; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244845AbiD1HKV (ORCPT + 99 others); Thu, 28 Apr 2022 03:10:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37814 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244855AbiD1HKK (ORCPT ); Thu, 28 Apr 2022 03:10:10 -0400 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9F05B9AE54; Thu, 28 Apr 2022 00:06:49 -0700 (PDT) Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23S2hZiG015405; Thu, 28 Apr 2022 07:06:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2021-07-09; bh=ZHF0ZEcmwBF0j3tPf+RFP5tVLnosrhzjMKfJfPBOHcA=; b=GMwcfPXCbCSXyF/gA74WwS5/29GM9Q0HfIg4sjc5D3vAoPk7wacJWeDfpmNKxwht50bg A4g44EwY8Ihee9/9NoP4e1WdkHZRkLP66QJmLmbntaEDGBBDFwIc0OzXjRZBPz8qMwWy NqpYzmBM/IaPnhSeZrviNFjbMojYviuOUKzz+PISH14tJ3W7cbkSN4fWz62x+a0QVpC6 +g5qu6jwQ+BHnnGFSzoDUaBDMEJldbmiqpz503fhBMyM+OGLvfSGKYUvFV1hd1c7Myqx lekcgrBV4M/4hn4gzAIP6GNvDZmNe69DKxxANTruhMotqdDmfLtS2BDZB4SdsVCJ7zdk Sg== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmb9au1ug-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 07:06:44 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23S70CpG019511; Thu, 28 Apr 2022 07:06:42 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fm7w634v8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 07:06:42 +0000 Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 23S76cAg007862; Thu, 28 Apr 2022 07:06:42 GMT Received: from ca-common-hq.us.oracle.com (ca-common-hq.us.oracle.com [10.211.9.209]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fm7w634qj-4; Thu, 28 Apr 2022 07:06:42 +0000 From: Dai Ngo To: chuck.lever@oracle.com, bfields@fieldses.org Cc: jlayton@redhat.com, viro@zeniv.linux.org.uk, linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH RFC v23 3/7] NFSD: move create/destroy of laundry_wq to init_nfsd and exit_nfsd Date: Thu, 28 Apr 2022 00:06:31 -0700 Message-Id: <1651129595-6904-4-git-send-email-dai.ngo@oracle.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1651129595-6904-1-git-send-email-dai.ngo@oracle.com> References: <1651129595-6904-1-git-send-email-dai.ngo@oracle.com> X-Proofpoint-ORIG-GUID: AQt8PjqF6oRUtnhmVOK4UCl1RIJp2J6b X-Proofpoint-GUID: AQt8PjqF6oRUtnhmVOK4UCl1RIJp2J6b X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_NONE 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-nfs@vger.kernel.org This patch moves create/destroy of laundry_wq from nfs4_state_start and nfs4_state_shutdown_net to init_nfsd and exit_nfsd to prevent the laundromat from being freed while a thread is processing a conflicting lock. Signed-off-by: Dai Ngo --- fs/nfsd/nfs4state.c | 28 ++++++++++++++++------------ fs/nfsd/nfsctl.c | 4 ++++ fs/nfsd/nfsd.h | 4 ++++ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index d2cb820de0ab..5b0777a24017 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -127,6 +127,21 @@ static const struct nfsd4_callback_ops nfsd4_cb_notify_lock_ops; static struct workqueue_struct *laundry_wq; +int nfsd4_create_laundry_wq(void) +{ + int rc = 0; + + laundry_wq = alloc_workqueue("%s", WQ_UNBOUND, 0, "nfsd4"); + if (laundry_wq == NULL) + rc = -ENOMEM; + return rc; +} + +void nfsd4_destroy_laundry_wq(void) +{ + destroy_workqueue(laundry_wq); +} + static bool is_session_dead(struct nfsd4_session *ses) { return ses->se_flags & NFS4_SESSION_DEAD; @@ -7751,22 +7766,12 @@ nfs4_state_start(void) { int ret; - laundry_wq = alloc_workqueue("%s", WQ_UNBOUND, 0, "nfsd4"); - if (laundry_wq == NULL) { - ret = -ENOMEM; - goto out; - } ret = nfsd4_create_callback_queue(); if (ret) - goto out_free_laundry; + return ret; set_max_delegations(); return 0; - -out_free_laundry: - destroy_workqueue(laundry_wq); -out: - return ret; } void @@ -7803,7 +7808,6 @@ nfs4_state_shutdown_net(struct net *net) void nfs4_state_shutdown(void) { - destroy_workqueue(laundry_wq); nfsd4_destroy_callback_queue(); } diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c index 16920e4512bd..322a208878f2 100644 --- a/fs/nfsd/nfsctl.c +++ b/fs/nfsd/nfsctl.c @@ -1544,6 +1544,9 @@ static int __init init_nfsd(void) retval = register_cld_notifier(); if (retval) goto out_free_all; + retval = nfsd4_create_laundry_wq(); + if (retval) + goto out_free_all; return 0; out_free_all: unregister_pernet_subsys(&nfsd_net_ops); @@ -1566,6 +1569,7 @@ static int __init init_nfsd(void) static void __exit exit_nfsd(void) { + nfsd4_destroy_laundry_wq(); unregister_cld_notifier(); unregister_pernet_subsys(&nfsd_net_ops); nfsd_drc_slab_free(); diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h index 23996c6ca75e..624a6c7da522 100644 --- a/fs/nfsd/nfsd.h +++ b/fs/nfsd/nfsd.h @@ -162,6 +162,8 @@ void nfs4_state_shutdown_net(struct net *net); int nfs4_reset_recoverydir(char *recdir); char * nfs4_recoverydir(void); bool nfsd4_spo_must_allow(struct svc_rqst *rqstp); +int nfsd4_create_laundry_wq(void); +void nfsd4_destroy_laundry_wq(void); #else static inline int nfsd4_init_slabs(void) { return 0; } static inline void nfsd4_free_slabs(void) { } @@ -175,6 +177,8 @@ static inline bool nfsd4_spo_must_allow(struct svc_rqst *rqstp) { return false; } +static inline int nfsd4_create_laundry_wq(void) { return 0 }; +static inline void nfsd4_destroy_laundry_wq(void) {}; #endif /* -- 2.9.5