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 774d5f14e
(NFSv4.1 Fix a pNFS session
draining deadlock)
Signed-off-by: Andy Adamson <andros@netapp.com>
[Trond: Changed order to start back-channel first. Minor code cleanup]
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: stable@vger.kernel.org [>=3.10]
This commit is contained in:
parent
7dc0ac70f8
commit
62f288a02f
@ -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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user