From: Jeff Layton <jlayton@kernel.org>
To: NeilBrown <neilb@suse.de>
Cc: Chuck Lever <chuck.lever@oracle.com>,
Olga Kornievskaia <kolga@netapp.com>,
Dai Ngo <Dai.Ngo@oracle.com>, Tom Talpey <tom@talpey.com>,
linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org,
Zhi Li <yieli@redhat.com>
Subject: Re: [PATCH RFC] nfsd: fix error handling in nfsd_svc
Date: Mon, 30 Oct 2023 17:43:20 -0400 [thread overview]
Message-ID: <cc7bce0a257fa433fd059e341d12460116df5e82.camel@kernel.org> (raw)
In-Reply-To: <169870163037.24305.14020614041859684912@noble.neil.brown.name>
On Tue, 2023-10-31 at 08:33 +1100, NeilBrown wrote:
> On Tue, 31 Oct 2023, Jeff Layton wrote:
> > Once we've set the nfsd_serv pointer in nfsd_svc, we still need to call
> > nfsd_last_thread if the server fails to be started. Remove the special
> > casing for nfsd_up_before case since shutting down the per-net stuff is
> > also handled by nfsd_last_thread.
> >
> > Finally, add a new special case at the start and skip doing anything if
> > the service already exists, 0 threads were requested and
> > serv->sv_nrthreads is 0.
>
> This is very similar to my
> Commit bf32075256e9 ("NFSD: simplify error paths in nfsd_svc()")
>
> The main difference being that special case you mention. I don't like
> that bit.
> If I run "rpc.nfsd 0" then I want the nfsd_svc to be destroyed, whether
> there were threads running or not.
>
> Is there a reason my patch isn't sufficient?
>
Ok, I wasn't sure whether that was the desired behavior or not. Your
patch should be fine actually, and it has already had some testing, so
let's just mark that for stable?
> Thanks,
> NeilBrown
>
>
> >
> > Fixes: 9f28a971ee9f ("nfsd: separate nfsd_last_thread() from nfsd_put()")
> > Reported-by: Zhi Li <yieli@redhat.com>
> > Signed-off-by: Jeff Layton <jlayton@kernel.org>
> > ---
> > Here's what I was thinking for a targeted patch for stable. Testing it
> > now, but I won't have results until tomorrow.
> > ---
> > fs/nfsd/nfssvc.c | 15 +++++----------
> > 1 file changed, 5 insertions(+), 10 deletions(-)
> >
> > diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
> > index 3deef000afa9..187b68769815 100644
> > --- a/fs/nfsd/nfssvc.c
> > +++ b/fs/nfsd/nfssvc.c
> > @@ -787,7 +787,6 @@ int
> > nfsd_svc(int nrservs, struct net *net, const struct cred *cred)
> > {
> > int error;
> > - bool nfsd_up_before;
> > struct nfsd_net *nn = net_generic(net, nfsd_net_id);
> > struct svc_serv *serv;
> >
> > @@ -797,8 +796,9 @@ nfsd_svc(int nrservs, struct net *net, const struct cred *cred)
> > nrservs = max(nrservs, 0);
> > nrservs = min(nrservs, NFSD_MAXSERVS);
> > error = 0;
> > + serv = nn->nfsd_serv;
> >
> > - if (nrservs == 0 && nn->nfsd_serv == NULL)
> > + if (nrservs == 0 && (serv == NULL || serv->sv_nrthreads == 0))
> > goto out;
> >
> > strscpy(nn->nfsd_name, utsname()->nodename,
> > @@ -808,22 +808,17 @@ nfsd_svc(int nrservs, struct net *net, const struct cred *cred)
> > if (error)
> > goto out;
> >
> > - nfsd_up_before = nn->nfsd_net_up;
> > serv = nn->nfsd_serv;
> >
> > error = nfsd_startup_net(net, cred);
> > if (error)
> > goto out_put;
> > error = svc_set_num_threads(serv, NULL, nrservs);
> > - if (error)
> > - goto out_shutdown;
> > - error = serv->sv_nrthreads;
> > if (error == 0)
> > - nfsd_last_thread(net);
> > -out_shutdown:
> > - if (error < 0 && !nfsd_up_before)
> > - nfsd_shutdown_net(net);
> > + error = serv->sv_nrthreads;
> > out_put:
> > + if (serv->sv_nrthreads == 0)
> > + nfsd_last_thread(net);
> > /* Threads now hold service active */
> > if (xchg(&nn->keep_active, 0))
> > svc_put(serv);
> >
> > ---
> > base-commit: 31b5a36c4b88b44c91cdd523997b1e86fb47339d
> > change-id: 20231030-kdevops-5f7366897ef4
> >
> > Best regards,
> > --
> > Jeff Layton <jlayton@kernel.org>
> >
> >
>
--
Jeff Layton <jlayton@kernel.org>
prev parent reply other threads:[~2023-10-30 21:43 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-30 17:32 [PATCH RFC] nfsd: fix error handling in nfsd_svc Jeff Layton
2023-10-30 21:33 ` NeilBrown
2023-10-30 21:43 ` Jeff Layton [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cc7bce0a257fa433fd059e341d12460116df5e82.camel@kernel.org \
--to=jlayton@kernel.org \
--cc=Dai.Ngo@oracle.com \
--cc=chuck.lever@oracle.com \
--cc=kolga@netapp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
--cc=tom@talpey.com \
--cc=yieli@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.