NFS: Fix a deadlock with lazy umount
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 20 Feb 2008 01:04:20 +0000 (20:04 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 26 Feb 2008 05:40:33 +0000 (21:40 -0800)
commit383ba71938519959be8e0b598ec658f0c211ff45
tree01eb0155676fe69d40f01dc137ea3be952d88997
parent4b5621f6b127bce9218998c187bd25bf7f9fc371
NFS: Fix a deadlock with lazy umount

We can't allow rpc callback functions like task->tk_ops->rpc_call_prepare()
and task->tk_ops->rpc_call_done() to call mntput() in any way, since
that will cause a deadlock when the call to rpc_shutdown_client() attempts
to wait on 'task' to complete.

We can avoid the above deadlock by moving calls to mntput to
task->tk_ops->rpc_release() callback, since at that time the task will be
marked as completed, and so rpc_shutdown_client won't attempt to wait on
it.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/direct.c
fs/nfs/inode.c
fs/nfs/read.c
fs/nfs/write.c