lkml.org 
[lkml]   [2006]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 007 of 9] 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.

    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--;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-07-25 03:59    [W:0.028 / U:123.660 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site