nfs41: nfs41: fix state manager deadlock in session reset
authorAndy Adamson <andros@netapp.com>
Fri, 4 Dec 2009 20:55:38 +0000 (15:55 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Fri, 4 Dec 2009 20:55:38 +0000 (15:55 -0500)
commitea028ac92541ac30bf202ed94cb53eec2ea0c9d6
treef9b807cf0f870db922f96e72dab68ed37ba18cf0
parent05f0d2364726c92f6b870db654967088349379fe
nfs41: nfs41: fix state manager deadlock in session reset

If the session is reset during state recovery, the state manager thread can
sleep on the slot_tbl_waitq causing a deadlock.

Add a completion framework to the session.  Have the state manager thread set
a new session state (NFS4CLNT_SESSION_DRAINING) and wait for the session slot
table to drain.

Signal the state manager thread in nfs41_sequence_free_slot when the
NFS4CLNT_SESSION_DRAINING bit is set and the session is drained.

Reported-by: Trond Myklebust <trond@netapp.com>
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfs4_fs.h
fs/nfs/nfs4proc.c
fs/nfs/nfs4state.c
include/linux/nfs_fs_sb.h