Received: by 2002:a05:7412:a9a2:b0:e2:908c:2ebd with SMTP id o34csp2861390rdh; Mon, 30 Oct 2023 09:41:32 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGnrIHfCMQL/FQMKcGO2zSJa50+nC9p256zoP8XRIH6yy9PVQgHqafk3w9Qx4RbVd763uqe X-Received: by 2002:a17:90a:9484:b0:280:4799:a841 with SMTP id s4-20020a17090a948400b002804799a841mr3784225pjo.38.1698684092403; Mon, 30 Oct 2023 09:41:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698684092; cv=none; d=google.com; s=arc-20160816; b=apZQeIELHuaJqYVEFbf93Ah4+5HJiykoE0nHaBm7PynF4sU2kh31luomdH7nA/D5SX F0OMFxqyV7DFhUIp2YdWlQRcIHNHDp9sL0Skk2sah38kQr3w5T5jj6KJIPqYeYWoI/Tu euEwG2KU1qb9rBCNDSB9c45G+ewTDgE3v4j+nBbdlf8M1F5tAnC9+mULh/I98vgbr6LY M5UAVZHtpHIh5K/tqJrATbGD7y+vybUjfN1dbqWUTLbbZbic3qLq9ctzdmVLDoy+B7D6 gmgAdV7ra2bCDNI0NTIkfvtNhSYUTBMTC9STk/rtTz8mlkiD3RCbrM1kuf1LAy+0Cu0G YGGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:references:in-reply-to:date:cc:to:from :subject:message-id:dkim-signature; bh=FTrVJ/iq+jq2Eyn8HoVFCfcBniuDBFljwfr+hIsOcpU=; fh=FVom988rX7d/6K4c3SVsNFnOn1ZSzrr1WXxdWe+vckg=; b=jINkVmUehIMZ05A0kDDi+ZBuMJvfFAYy3EezYul1iCpH8jUdXR3YnMQ4gIKcD6z20W 5OjZIJ81wqww8QB5T+M66GBbKW7pI47cS/Pt9D1F/Vz8JJmHv9hAyHK9z4w6SZDqsgaN 0fQfpDL+wgZ9un1mDF5BGZ+0+pkj/FPuqwdBXHParwPKqtqe51CdtE+JcpoXi+eYmCi0 fuSsn+MeZL2OzduAzLDPUKNtYcU8InaAklBUXB0AjVpd4JrONuUVpDkDKfQkIgEUv+RV tdF2QBF53qzioNqd9jjMEYAVr1ArZp2y6+HdfpyiuQaccleHHDdNJ0Oqy1yGlXyeRpx8 mCvw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=EU9cdLnI; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id kk3-20020a17090b4a0300b002777081181fsi1593744pjb.51.2023.10.30.09.41.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Oct 2023 09:41:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=EU9cdLnI; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-nfs-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 fry.vger.email (Postfix) with ESMTP id 31DDC8080D47; Mon, 30 Oct 2023 09:41:10 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232800AbjJ3QlK (ORCPT + 99 others); Mon, 30 Oct 2023 12:41:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56866 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231789AbjJ3QlJ (ORCPT ); Mon, 30 Oct 2023 12:41:09 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8DC3ABD for ; Mon, 30 Oct 2023 09:41:07 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9CFC2C433C7; Mon, 30 Oct 2023 16:41:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698684067; bh=WKZZaIA0O3NzIRbz25462/IKKK0FNXvKJ65MNHzVeeY=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=EU9cdLnIFqb/rbjBEV4FPK9zdW/pvZFKQxNoGA89FBHFOOh1Rqq0ZzJahmCk2m3Ni vw4K/9UIRBBSrwPpbs+pXrbwi8Wxo2y7SYe+XzqID+gOKgPX/fSQyIDDcE+v1B2E5G 2wm9v+9OfVi7EtEVMr9+aFppUUC2vuGSydN1szhRZIg2kVonBtinBC+NRyO391u7lo LzbMBhr67fcylkui0Y2IDE6i3tFf29eVduISpDfFVSFG4wzjjZDFo2D3guHUH5IJP3 KyBSwUCnBn/3yXan+miII/x7Ji5EKC0o2HTSPQffmzHA1x1cFjxU1efNRYNYps/ftq x85EW/UF7fc1w== Message-ID: <7988380f001810c24d105e9989fc1fae17241bbd.camel@kernel.org> Subject: Re: [PATCH 1/5] nfsd: call nfsd_last_thread() before final nfsd_put() From: Jeff Layton To: Chuck Lever Cc: NeilBrown , linux-nfs@vger.kernel.org, Olga Kornievskaia , Dai Ngo , Tom Talpey Date: Mon, 30 Oct 2023 12:41:05 -0400 In-Reply-To: References: <20231030011247.9794-1-neilb@suse.de> <20231030011247.9794-2-neilb@suse.de> Content-Type: text/plain; charset="ISO-8859-15" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.48.4 (3.48.4-1.fc38) MIME-Version: 1.0 X-Spam-Status: No, score=-1.7 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Mon, 30 Oct 2023 09:41:10 -0700 (PDT) On Mon, 2023-10-30 at 11:52 -0400, Chuck Lever wrote: > On Mon, Oct 30, 2023 at 09:15:17AM -0400, Jeff Layton wrote: > > On Mon, 2023-10-30 at 12:08 +1100, NeilBrown wrote: > > > If write_ports_addfd or write_ports_addxprt fail, they call nfsD_put(= ) > > > without calling nfsd_last_thread(). This leaves nn->nfsd_serv pointi= ng > > > to a structure that has been freed. > > >=20 > > > So export nfsd_last_thread() and call it when the nfsd_serv is about = to > > > be destroy. > > >=20 > > > Signed-off-by: NeilBrown > > > --- > > > fs/nfsd/nfsctl.c | 9 +++++++-- > > > fs/nfsd/nfsd.h | 1 + > > > fs/nfsd/nfssvc.c | 2 +- > > > 3 files changed, 9 insertions(+), 3 deletions(-) > > >=20 > > > diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c > > > index 739ed5bf71cd..79efb1075f38 100644 > > > --- a/fs/nfsd/nfsctl.c > > > +++ b/fs/nfsd/nfsctl.c > > > @@ -705,8 +705,10 @@ static ssize_t __write_ports_addfd(char *buf, st= ruct net *net, const struct cred > > > =20 > > > err =3D svc_addsock(nn->nfsd_serv, net, fd, buf, SIMPLE_TRANSACTION= _LIMIT, cred); > > > =20 > > > - if (err >=3D 0 && > > > - !nn->nfsd_serv->sv_nrthreads && !xchg(&nn->keep_active, 1)) > > > + if (err < 0 && !nn->nfsd_serv->sv_nrthreads && !nn->keep_active) > > > + nfsd_last_thread(net); > > > + else if (err >=3D 0 && > > > + !nn->nfsd_serv->sv_nrthreads && !xchg(&nn->keep_active, 1)) > > > svc_get(nn->nfsd_serv); > > > =20 > > > nfsd_put(net); > > > @@ -757,6 +759,9 @@ static ssize_t __write_ports_addxprt(char *buf, s= truct net *net, const struct cr > > > svc_xprt_put(xprt); > > > } > > > out_err: > > > + if (!nn->nfsd_serv->sv_nrthreads && !nn->keep_active) > > > + nfsd_last_thread(net); > > > + > > > nfsd_put(net); > > > return err; > > > } > > > diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h > > > index f5ff42f41ee7..3286ffacbc56 100644 > > > --- a/fs/nfsd/nfsd.h > > > +++ b/fs/nfsd/nfsd.h > > > @@ -155,6 +155,7 @@ int nfsd_vers(struct nfsd_net *nn, int vers, enum= vers_op change); > > > int nfsd_minorversion(struct nfsd_net *nn, u32 minorversion, enum ve= rs_op change); > > > void nfsd_reset_versions(struct nfsd_net *nn); > > > int nfsd_create_serv(struct net *net); > > > +void nfsd_last_thread(struct net *net); > > > =20 > > > extern int nfsd_max_blksize; > > > =20 > > > diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c > > > index d6122bb2d167..6c968c02cc29 100644 > > > --- a/fs/nfsd/nfssvc.c > > > +++ b/fs/nfsd/nfssvc.c > > > @@ -542,7 +542,7 @@ static struct notifier_block nfsd_inet6addr_notif= ier =3D { > > > /* Only used under nfsd_mutex, so this atomic may be overkill: */ > > > static atomic_t nfsd_notifier_refcount =3D ATOMIC_INIT(0); > > > =20 > > > -static void nfsd_last_thread(struct net *net) > > > +void nfsd_last_thread(struct net *net) > > > { > > > struct nfsd_net *nn =3D net_generic(net, nfsd_net_id); > > > struct svc_serv *serv =3D nn->nfsd_serv; > >=20 > > This patch should fix the problem that I was seeing with write_ports, >=20 > Then let's add >=20 > Fixes: ec52361df99b ("SUNRPC: stop using ->sv_nrthreads as a refcount") >=20 > to this one, since it addresses a crasher seen in the wild. >=20 >=20 Sounds good. > > but it won't fix the hinky error cleanup in nfsd_svc. It looks like tha= t > > does get fixed in patch #4 though, so I'm not too concerned. >=20 > Does that fix also need to be backported? >=20 I think so, but we might want to split that out into a more targeted patch and apply it ahead of the rest of the series. Our QA folks seem to be able to hit the problem somehow, so it's likely to be triggered by people in the field too. --=20 Jeff Layton