SUNRPC: discard sv_refcnt, and svc_get/svc_put
authorNeilBrown <neilb@suse.de>
Fri, 15 Dec 2023 00:56:34 +0000 (11:56 +1100)
committerChuck Lever <chuck.lever@oracle.com>
Sun, 7 Jan 2024 22:54:33 +0000 (17:54 -0500)
commit1e3577a4521ef33199eea05ce7b9099825848c49
tree4ab957dcd5a796583096731bf17ced779190efe3
parent7b207ccd983350a5dedd132b57c666186dd02a7c
SUNRPC: discard sv_refcnt, and svc_get/svc_put

sv_refcnt is no longer useful.
lockd and nfs-cb only ever have the svc active when there are a non-zero
number of threads, so sv_refcnt mirrors sv_nrthreads.

nfsd also keeps the svc active between when a socket is added and when
the first thread is started, but we don't really need a refcount for
that.  We can simply not destroy the svc while there are any permanent
sockets attached.

So remove sv_refcnt and the get/put functions.
Instead of a final call to svc_put(), call svc_destroy() instead.
This is changed to also store NULL in the passed-in pointer to make it
easier to avoid use-after-free situations.

Signed-off-by: NeilBrown <neilb@suse.de>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/lockd/svc.c
fs/nfs/callback.c
fs/nfsd/netns.h
fs/nfsd/nfsctl.c
fs/nfsd/nfssvc.c
include/linux/sunrpc/svc.h
net/sunrpc/svc.c