[PATCH] knfsd: separate out some parts of nfsd_svc, which start nfs servers
Separate out the code for creating a new service, and for creating initial sockets. Some of these new functions will have multiple callers soon. [akpm@osdl.org: cleanups] Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
6658d3a7bb
commit
02a375f0ac
@@ -195,6 +195,52 @@ void nfsd_reset_versions(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nfsd_create_serv(void)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
lock_kernel();
|
||||||
|
if (nfsd_serv) {
|
||||||
|
nfsd_serv->sv_nrthreads++;
|
||||||
|
unlock_kernel();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
atomic_set(&nfsd_busy, 0);
|
||||||
|
nfsd_serv = svc_create(&nfsd_program, NFSD_BUFSIZE,
|
||||||
|
nfsd_last_thread);
|
||||||
|
if (nfsd_serv == NULL)
|
||||||
|
err = -ENOMEM;
|
||||||
|
else
|
||||||
|
nfsd_serv->sv_nrthreads++;
|
||||||
|
unlock_kernel();
|
||||||
|
do_gettimeofday(&nfssvc_boot); /* record boot time */
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int nfsd_init_socks(int port)
|
||||||
|
{
|
||||||
|
int error;
|
||||||
|
if (!list_empty(&nfsd_serv->sv_permsocks))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error = svc_makesock(nfsd_serv, IPPROTO_UDP, port);
|
||||||
|
if (error < 0)
|
||||||
|
return error;
|
||||||
|
error = lockd_up(IPPROTO_UDP);
|
||||||
|
if (error < 0)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
#ifdef CONFIG_NFSD_TCP
|
||||||
|
error = svc_makesock(nfsd_serv, IPPROTO_TCP, port);
|
||||||
|
if (error < 0)
|
||||||
|
return error;
|
||||||
|
error = lockd_up(IPPROTO_TCP);
|
||||||
|
if (error < 0)
|
||||||
|
return error;
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
nfsd_svc(unsigned short port, int nrservs)
|
nfsd_svc(unsigned short port, int nrservs)
|
||||||
{
|
{
|
||||||
@@ -216,32 +262,17 @@ nfsd_svc(unsigned short port, int nrservs)
|
|||||||
error = nfs4_state_start();
|
error = nfs4_state_start();
|
||||||
if (error<0)
|
if (error<0)
|
||||||
goto out;
|
goto out;
|
||||||
if (!nfsd_serv) {
|
|
||||||
nfsd_reset_versions();
|
|
||||||
|
|
||||||
atomic_set(&nfsd_busy, 0);
|
nfsd_reset_versions();
|
||||||
error = -ENOMEM;
|
|
||||||
nfsd_serv = svc_create(&nfsd_program, NFSD_BUFSIZE,
|
error = nfsd_create_serv();
|
||||||
nfsd_last_thread);
|
|
||||||
if (nfsd_serv == NULL)
|
if (error)
|
||||||
goto out;
|
goto out;
|
||||||
error = svc_makesock(nfsd_serv, IPPROTO_UDP, port);
|
error = nfsd_init_socks(port);
|
||||||
if (error < 0)
|
if (error)
|
||||||
goto failure;
|
goto failure;
|
||||||
error = lockd_up(IPPROTO_UDP);
|
|
||||||
if (error < 0)
|
|
||||||
goto failure;
|
|
||||||
#ifdef CONFIG_NFSD_TCP
|
|
||||||
error = svc_makesock(nfsd_serv, IPPROTO_TCP, port);
|
|
||||||
if (error < 0)
|
|
||||||
goto failure;
|
|
||||||
error = lockd_up(IPPROTO_TCP);
|
|
||||||
if (error < 0)
|
|
||||||
goto failure;
|
|
||||||
#endif
|
|
||||||
do_gettimeofday(&nfssvc_boot); /* record boot time */
|
|
||||||
} else
|
|
||||||
nfsd_serv->sv_nrthreads++;
|
|
||||||
nrservs -= (nfsd_serv->sv_nrthreads-1);
|
nrservs -= (nfsd_serv->sv_nrthreads-1);
|
||||||
while (nrservs > 0) {
|
while (nrservs > 0) {
|
||||||
nrservs--;
|
nrservs--;
|
||||||
|
Reference in New Issue
Block a user