linux/fs/lockd
NeilBrown ec52361df9 SUNRPC: stop using ->sv_nrthreads as a refcount
The use of sv_nrthreads as a general refcount results in clumsy code, as
is seen by various comments needed to explain the situation.

This patch introduces a 'struct kref' and uses that for reference
counting, leaving sv_nrthreads to be a pure count of threads.  The kref
is managed particularly in svc_get() and svc_put(), and also nfsd_put();

svc_destroy() now takes a pointer to the embedded kref, rather than to
the serv.

nfsd allows the svc_serv to exist with ->sv_nrhtreads being zero.  This
happens when a transport is created before the first thread is started.
To support this, a 'keep_active' flag is introduced which holds a ref on
the svc_serv.  This is set when any listening socket is successfully
added (unless there are running threads), and cleared when the number of
threads is set.  So when the last thread exits, the nfs_serv will be
destroyed.
The use of 'keep_active' replaces previous code which checked if there
were any permanent sockets.

We no longer clear ->rq_server when nfsd() exits.  This was done
to prevent svc_exit_thread() from calling svc_destroy().
Instead we take an extra reference to the svc_serv to prevent
svc_destroy() from being called.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
2021-12-13 13:42:51 -05:00
..
clnt4xdr.c NFS: Remove print_overflow_msg() 2019-02-13 11:53:45 -05:00
clntlock.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
clntproc.c SUNRPC: Trace calls to .rpc_call_done 2021-10-20 18:09:54 -04:00
clntxdr.c NFS: Remove print_overflow_msg() 2019-02-13 11:53:45 -05:00
host.c fs/lockd: convert comma to semicolon 2020-12-16 07:57:37 -05:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
mon.c Replace HTTP links with HTTPS ones: NFS, SUNRPC, and LOCKD clients 2020-09-21 10:21:10 -04:00
netns.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
procfs.c proc: convert everything to "struct proc_ops" 2020-02-04 03:05:26 +00:00
procfs.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
svc4proc.c SUNRPC: Trace calls to .rpc_call_done 2021-10-20 18:09:54 -04:00
svc.c SUNRPC: stop using ->sv_nrthreads as a refcount 2021-12-13 13:42:51 -05:00
svclock.c lockd: don't attempt blocking locks on nfs reexports 2021-08-26 15:32:18 -04:00
svcproc.c SUNRPC: Trace calls to .rpc_call_done 2021-10-20 18:09:54 -04:00
svcshare.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
svcsubs.c Keep read and write fds with each nlm_file 2021-08-23 18:05:31 -04:00
svcxdr.h NLM: Fix svcxdr_encode_owner() 2021-09-17 10:35:10 -04:00
xdr4.c SUNRPC: Change return value type of .pc_encode 2021-10-13 11:34:49 -04:00
xdr.c SUNRPC: Change return value type of .pc_encode 2021-10-13 11:34:49 -04:00