diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-05-27 13:47:21 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-05-27 14:00:08 -0400 |
commit | 43ac544cb36adf38338c01968f8e3a5f81b7d629 (patch) | |
tree | 8abf285176d59f6d251798112ea28ab724d27cea /fs | |
parent | 32b0131069c5bebf52368a9fe170f8d58b78fa8d (diff) |
NFSv4.1: nfs4_bind_conn_to_session should drain the session
In order to avoid races with other RPC calls that end up setting the
NFS4CLNT_BIND_CONN_TO_SESSION flag.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfs/nfs4state.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 7dbca666283a..d21ed0309601 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c | |||
@@ -1782,10 +1782,12 @@ static int nfs4_bind_conn_to_session(struct nfs_client *clp) | |||
1782 | struct rpc_cred *cred; | 1782 | struct rpc_cred *cred; |
1783 | int ret; | 1783 | int ret; |
1784 | 1784 | ||
1785 | nfs4_begin_drain_session(clp); | ||
1785 | cred = nfs4_get_exchange_id_cred(clp); | 1786 | cred = nfs4_get_exchange_id_cred(clp); |
1786 | ret = nfs4_proc_bind_conn_to_session(clp, cred); | 1787 | ret = nfs4_proc_bind_conn_to_session(clp, cred); |
1787 | if (cred) | 1788 | if (cred) |
1788 | put_rpccred(cred); | 1789 | put_rpccred(cred); |
1790 | clear_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); | ||
1789 | return ret; | 1791 | return ret; |
1790 | } | 1792 | } |
1791 | #else /* CONFIG_NFS_V4_1 */ | 1793 | #else /* CONFIG_NFS_V4_1 */ |