linux/fs/lockd
Jeff Layton 031fd3aa20 NLM: set RPC_CLNT_CREATE_NOPING for NLM RPC clients
It's currently possible for an unresponsive NLM client to completely
lock up a server's lockd. The scenario is something like this:

1) client1 (or a process on the server) takes a lock on a file
2) client2 tries to take a blocking lock on the same file and
   awaits the callback
3) client2 goes unresponsive (plug pulled, network partition, etc)
4) client1 releases the lock

...at that point the server's lockd will try to queue up a GRANT_MSG
callback for client2, but first it requeues the block with a timeout of
30s. nlm_async_call will attempt to bind the RPC client to client2 and
will call rpc_ping. rpc_ping entails a sync RPC call and if client2 is
unresponsive it will take around 60s for that to time out. Once it times
out, it's already time to retry the block and the whole process repeats.

Once in this situation, nlmsvc_retry_blocked will never return until
the host starts responding again. lockd won't service new calls.

Fix this by skipping the RPC ping on NLM RPC clients. This makes
nlm_async_call return quickly when called.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
2008-02-10 18:09:36 -05:00
..
clntlock.c NLM: Introduce an arguments structure for nlmclnt_init() 2008-01-30 02:06:07 -05:00
clntproc.c NLM: Fix a bogus 'return' in nlmclnt_rpc_release 2008-01-30 02:06:08 -05:00
host.c NLM: set RPC_CLNT_CREATE_NOPING for NLM RPC clients 2008-02-10 18:09:36 -05:00
Makefile Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mon.c NFS/SUNRPC: use transport protocol naming 2007-10-09 17:17:53 -04:00
svc4proc.c lockd: fix reference count leaks in async locking case 2008-02-01 16:42:06 -05:00
svc.c knfsd: Support adding transports by writing portlist file 2008-02-01 16:42:13 -05:00
svclock.c Leak in nlmsvc_testlock for async GETFL case 2008-02-01 16:42:07 -05:00
svcproc.c lockd: fix reference count leaks in async locking case 2008-02-01 16:42:06 -05:00
svcshare.c [PATCH] getting rid of all casts of k[cmz]alloc() calls 2006-12-13 09:05:58 -08:00
svcsubs.c lockd: minor log message fix 2008-02-01 16:42:15 -05:00
xdr4.c LOCKD: Convert printk's to dprintk's in lockd XDR routines 2007-10-09 17:17:12 -04:00
xdr.c lockd: Eliminate harmless mixed sign comparison in nlmdbg_cookie2a() 2008-01-30 02:06:02 -05:00