diff options
Diffstat (limited to 'fs/nfs/nfs4state.c')
| -rw-r--r-- | fs/nfs/nfs4state.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index c679b9ecef63..f38300e9f171 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c | |||
| @@ -244,6 +244,16 @@ static int nfs4_begin_drain_session(struct nfs_client *clp) | |||
| 244 | return nfs4_wait_on_slot_tbl(&ses->fc_slot_table); | 244 | return nfs4_wait_on_slot_tbl(&ses->fc_slot_table); |
| 245 | } | 245 | } |
| 246 | 246 | ||
| 247 | static void nfs41_finish_session_reset(struct nfs_client *clp) | ||
| 248 | { | ||
| 249 | clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); | ||
| 250 | clear_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); | ||
| 251 | /* create_session negotiated new slot table */ | ||
| 252 | clear_bit(NFS4CLNT_RECALL_SLOT, &clp->cl_state); | ||
| 253 | clear_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); | ||
| 254 | nfs41_setup_state_renewal(clp); | ||
| 255 | } | ||
| 256 | |||
| 247 | int nfs41_init_clientid(struct nfs_client *clp, struct rpc_cred *cred) | 257 | int nfs41_init_clientid(struct nfs_client *clp, struct rpc_cred *cred) |
| 248 | { | 258 | { |
| 249 | int status; | 259 | int status; |
| @@ -259,8 +269,7 @@ do_confirm: | |||
| 259 | status = nfs4_proc_create_session(clp, cred); | 269 | status = nfs4_proc_create_session(clp, cred); |
| 260 | if (status != 0) | 270 | if (status != 0) |
| 261 | goto out; | 271 | goto out; |
| 262 | clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); | 272 | nfs41_finish_session_reset(clp); |
| 263 | nfs41_setup_state_renewal(clp); | ||
| 264 | nfs_mark_client_ready(clp, NFS_CS_READY); | 273 | nfs_mark_client_ready(clp, NFS_CS_READY); |
| 265 | out: | 274 | out: |
| 266 | return status; | 275 | return status; |
| @@ -1772,16 +1781,9 @@ static int nfs4_reset_session(struct nfs_client *clp) | |||
| 1772 | status = nfs4_handle_reclaim_lease_error(clp, status); | 1781 | status = nfs4_handle_reclaim_lease_error(clp, status); |
| 1773 | goto out; | 1782 | goto out; |
| 1774 | } | 1783 | } |
| 1775 | clear_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state); | 1784 | nfs41_finish_session_reset(clp); |
| 1776 | /* create_session negotiated new slot table */ | ||
| 1777 | clear_bit(NFS4CLNT_RECALL_SLOT, &clp->cl_state); | ||
| 1778 | clear_bit(NFS4CLNT_BIND_CONN_TO_SESSION, &clp->cl_state); | ||
| 1779 | dprintk("%s: session reset was successful for server %s!\n", | 1785 | dprintk("%s: session reset was successful for server %s!\n", |
| 1780 | __func__, clp->cl_hostname); | 1786 | __func__, clp->cl_hostname); |
| 1781 | |||
| 1782 | /* Let the state manager reestablish state */ | ||
| 1783 | if (!test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) | ||
| 1784 | nfs41_setup_state_renewal(clp); | ||
| 1785 | out: | 1787 | out: |
| 1786 | if (cred) | 1788 | if (cred) |
| 1787 | put_rpccred(cred); | 1789 | put_rpccred(cred); |
