This code .... grew a bit since my previous pencil-sketch code. The goal is really the final patch: using a llist without spinlocks to handle dispatch of idle threads. To get there I found it necessary - or at least helpful - to do a lot of refactoring. This code passes some basic tests, but I haven't push it hard yet. Even if other aren't convinced that llists are the best solution, I think a lot of the refactoring is this valuable. Comments welcome, Thanks, NeilBrown --- NeilBr own (14): lockd: remove SIGKILL handling. nfsd: don't allow nfsd threads to be signalled. SUNRPC: call svc_process() from svc_recv(). SUNRPC: change svc_recv() to return void. SUNRPC: remove timeout arg from svc_recv() SUNRPC: change various server-side #defines to enum SUNRPC: refactor svc_recv() SUNRPC: integrate back-channel processing with svc_recv() and svc_process() SUNRPC: change how svc threads are asked to exit. SUNRPC: change svc_pool_wake_idle_thread() to return nothing. SUNRPC: add list of idle threads SUNRPC: discard SP_CONGESTED SUNRPC: change service idle list to be an llist SUNRPC: only have one thread waking up at a time fs/lockd/svc.c | 49 ++----- fs/lockd/svclock.c | 9 +- fs/nfs/callback.c | 59 +------- fs/nfsd/nfs4proc.c | 10 +- fs/nfsd/nfssvc.c | 22 +-- include/linux/llist.h | 2 + include/linux/lockd/lockd.h | 4 +- include/linux/sunrpc/cache.h | 11 +- include/linux/sunrpc/svc.h | 87 +++++++++--- include/linux/sunrpc/svc_xprt.h | 39 +++--- include/linux/sunrpc/svcauth.h | 29 ++-- include/linux/sunrpc/svcsock.h | 2 +- include/linux/sunrpc/xprtsock.h | 25 ++-- include/trace/events/sunrpc.h | 5 +- lib/llist.c | 27 ++++ net/sunrpc/backchannel_rqst.c | 8 +- net/sunrpc/svc.c | 71 ++++------ net/sunrpc/svc_xprt.c | 226 ++++++++++++++++-------------- net/sunrpc/xprtrdma/backchannel.c | 2 +- 19 files changed, 347 insertions(+), 340 deletions(-) -- Signature