On Fri, Jan 05, 2024 at 11:00:07AM +1100, Stephen Rothwell wrote: > Hi all, > > Today's linux-next merge of the nfsd tree got a conflict in: > > fs/nfsd/nfsctl.c > > between commit: > > 76d296a82657 ("nfsd: drop the nfsd_put helper") > > from the nfsd-fixes tree and commits: > > 3a0b966ab40f ("SUNRPC: discard sv_refcnt, and svc_get/svc_put") > 9bf4b41b79a3 ("nfsd: rename nfsd_last_thread() to nfsd_destroy_serv()") > > from the nfsd tree. Ugh. I plan to rebase nfsd-next as soon as 76d296a82657 ("nfsd: drop the nfsd_put helper") is merged. I'll have a closer look at this conflict tomorrow (my time). > I fixed it up (see below) and can carry the fix as necessary. This > is now fixed as far as linux-next is concerned, but any non trivial > conflicts should be mentioned to your upstream maintainer when your tree > is submitted for merging. You may also want to consider cooperating > with the maintainer of the conflicting tree to minimise any particularly > complex conflicts. > > -- > Cheers, > Stephen Rothwell > > diff --cc fs/nfsd/nfsctl.c > index 87fed75808ff,cca1dd7b8c55..000000000000 > --- a/fs/nfsd/nfsctl.c > +++ b/fs/nfsd/nfsctl.c > @@@ -704,15 -707,12 +708,12 @@@ static ssize_t __write_ports_addfd(cha > if (err != 0) > return err; > > - err = svc_addsock(nn->nfsd_serv, net, fd, buf, SIMPLE_TRANSACTION_LIMIT, cred); > + serv = nn->nfsd_serv; > + err = svc_addsock(serv, net, fd, buf, SIMPLE_TRANSACTION_LIMIT, cred); > > - if (err < 0 && !serv->sv_nrthreads && !nn->keep_active) > - nfsd_last_thread(net); > - else if (err >= 0 && !serv->sv_nrthreads && !xchg(&nn->keep_active, 1)) > - svc_get(serv); > - if (!nn->nfsd_serv->sv_nrthreads && > - list_empty(&nn->nfsd_serv->sv_permsocks)) > ++ if (!serv->sv_nrthreads && list_empty(&serv->sv_permsocks)) > + nfsd_destroy_serv(net); > > - svc_put(serv); > return err; > } > > @@@ -750,22 -748,18 +751,17 @@@ static ssize_t __write_ports_addxprt(ch > if (err < 0 && err != -EAFNOSUPPORT) > goto out_close; > > - if (!serv->sv_nrthreads && !xchg(&nn->keep_active, 1)) > - svc_get(serv); > - > - svc_put(serv); > return 0; > out_close: > - xprt = svc_find_xprt(nn->nfsd_serv, transport, net, PF_INET, port); > + xprt = svc_find_xprt(serv, transport, net, PF_INET, port); > if (xprt != NULL) { > svc_xprt_close(xprt); > svc_xprt_put(xprt); > } > out_err: > - if (!serv->sv_nrthreads && !nn->keep_active) > - nfsd_last_thread(net); > - if (!nn->nfsd_serv->sv_nrthreads && > - list_empty(&nn->nfsd_serv->sv_permsocks)) > ++ if (!serv->sv_nrthreads && list_empty(&serv->sv_permsocks)) > + nfsd_destroy_serv(net); > > - svc_put(serv); > return err; > } > -- Chuck Lever