• NeilBrown's avatar
    lockd: hold a reference to nlmsvc_serv while stopping the thread. · f4578ba1
    NeilBrown authored
    Both nfsd and nfsv4-callback take a temporary reference to the svc_serv
    while calling svc_set_num_threads() to stop the last thread.  lockd does
    not.
    
    This extra reference prevents the scv_serv from being freed when the
    last thread drops its reference count.  This is not currently needed
    for lockd as the svc_serv is not accessed after the last thread is told
    to exit.
    
    However a future patch will require svc_exit_thread() to access the
    svc_serv after the svc_put() so it will need the code that calls
    svc_set_num_threads() to keep a reference and keep the svc_serv active.
    
    So copy the pattern from nfsd and nfsv4-cb to lockd, and take a
    reference around svc_set_num_threads(.., 0)
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    Tested-by: default avatarJeff Layton <jlayton@kernel.org>
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    f4578ba1
svc.c 17.5 KB