[PATCH 007 of 9] knfsd: Separate out some parts of nfsd_svc, which start nfs servers.

NeilBrown
2006-07-25T01:55:39Z

Separate out the code for creating a new service, and for creating
initial sockets.

Some of these new functions will have multiple callers soon.

Signed-off-by: Neil Brown <neilb@suse.de>

### Diffstat output
./fs/nfsd/nfssvc.c | 82 ++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 57 insertions(+), 25 deletions(-)

diff .prev/fs/nfsd/nfssvc.c ./fs/nfsd/nfssvc.c
--- .prev/fs/nfsd/nfssvc.c 2006-07-24 15:17:36.000000000 +1000
+++ ./fs/nfsd/nfssvc.c 2006-07-24 15:20:39.000000000 +1000
@@ -195,6 +195,53 @@ void nfsd_reset_versions(void)
}
}

+
+static inline 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 inline 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
nfsd_svc(unsigned short port, int nrservs)
{
@@ -216,32 +263,17 @@ nfsd_svc(unsigned short port, int nrserv
error = nfs4_state_start();
if (error<0)
goto out;
- if (!nfsd_serv) {
- nfsd_reset_versions();

- atomic_set(&nfsd_busy, 0);
- error = -ENOMEM;
- nfsd_serv = svc_create(&nfsd_program, NFSD_BUFSIZE,
- nfsd_last_thread);
- if (nfsd_serv == NULL)
- goto out;
- error = svc_makesock(nfsd_serv, IPPROTO_UDP, port);
- if (error < 0)
- 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++;
+ nfsd_reset_versions();
+
+ error = nfsd_create_serv();
+
+ if (error)
+ goto out;
+ error = nfsd_init_socks(port);
+ if (error)
+ goto failure;
+
nrservs -= (nfsd_serv->sv_nrthreads-1);
while (nrservs > 0) {
nrservs--;