Revert "NFSD: simplify error paths in nfsd_svc()"
This reverts commit 3890c7c53c
.
This commit is contained in:
parent
6d767ecd3e
commit
370fd3e8ce
1 changed files with 10 additions and 4 deletions
|
@ -567,6 +567,7 @@ void nfsd_last_thread(struct net *net)
|
|||
return;
|
||||
|
||||
nfsd_shutdown_net(net);
|
||||
pr_info("nfsd: last server has exited, flushing export cache\n");
|
||||
nfsd_export_flush(net);
|
||||
}
|
||||
|
||||
|
@ -781,6 +782,7 @@ 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;
|
||||
|
||||
|
@ -800,6 +802,8 @@ nfsd_svc(int nrservs, struct net *net, const struct cred *cred)
|
|||
error = nfsd_create_serv(net);
|
||||
if (error)
|
||||
goto out;
|
||||
|
||||
nfsd_up_before = nn->nfsd_net_up;
|
||||
serv = nn->nfsd_serv;
|
||||
|
||||
error = nfsd_startup_net(net, cred);
|
||||
|
@ -807,15 +811,17 @@ nfsd_svc(int nrservs, struct net *net, const struct cred *cred)
|
|||
goto out_put;
|
||||
error = svc_set_num_threads(serv, NULL, nrservs);
|
||||
if (error)
|
||||
goto out_put;
|
||||
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);
|
||||
out_put:
|
||||
/* Threads now hold service active */
|
||||
if (xchg(&nn->keep_active, 0))
|
||||
svc_put(serv);
|
||||
|
||||
if (serv->sv_nrthreads == 0)
|
||||
nfsd_last_thread(net);
|
||||
svc_put(serv);
|
||||
out:
|
||||
mutex_unlock(&nfsd_mutex);
|
||||
|
|
Loading…
Add table
Reference in a new issue