Skip to content
Snippets Groups Projects
Commit 62f288a0 authored by Andy Adamson's avatar Andy Adamson Committed by Trond Myklebust
Browse files

NFSv4.1 end back channel session draining


We need to ensure that we clear NFS4_SLOT_TBL_DRAINING on the back
channel when we're done recovering the session.

Regression introduced by commit 774d5f14 (NFSv4.1 Fix a pNFS session
draining deadlock)

Signed-off-by: default avatarAndy Adamson <andros@netapp.com>
[Trond: Changed order to start back-channel first. Minor code cleanup]
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
Cc: stable@vger.kernel.org [>=3.10]
parent 7dc0ac70
No related branches found
No related tags found
No related merge requests found
...@@ -228,19 +228,8 @@ static int nfs41_setup_state_renewal(struct nfs_client *clp) ...@@ -228,19 +228,8 @@ static int nfs41_setup_state_renewal(struct nfs_client *clp)
return status; return status;
} }
/* static void nfs4_end_drain_slot_table(struct nfs4_slot_table *tbl)
* Back channel returns NFS4ERR_DELAY for new requests when
* NFS4_SESSION_DRAINING is set so there is no work to be done when draining
* is ended.
*/
static void nfs4_end_drain_session(struct nfs_client *clp)
{ {
struct nfs4_session *ses = clp->cl_session;
struct nfs4_slot_table *tbl;
if (ses == NULL)
return;
tbl = &ses->fc_slot_table;
if (test_and_clear_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state)) { if (test_and_clear_bit(NFS4_SLOT_TBL_DRAINING, &tbl->slot_tbl_state)) {
spin_lock(&tbl->slot_tbl_lock); spin_lock(&tbl->slot_tbl_lock);
nfs41_wake_slot_table(tbl); nfs41_wake_slot_table(tbl);
...@@ -248,6 +237,16 @@ static void nfs4_end_drain_session(struct nfs_client *clp) ...@@ -248,6 +237,16 @@ static void nfs4_end_drain_session(struct nfs_client *clp)
} }
} }
static void nfs4_end_drain_session(struct nfs_client *clp)
{
struct nfs4_session *ses = clp->cl_session;
if (ses != NULL) {
nfs4_end_drain_slot_table(&ses->bc_slot_table);
nfs4_end_drain_slot_table(&ses->fc_slot_table);
}
}
/* /*
* Signal state manager thread if session fore channel is drained * Signal state manager thread if session fore channel is drained
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment