提交 7111dc73 编写于 作者: T Trond Myklebust 提交者: Linus Torvalds

NFSv4: Fix an infinite looping problem with the nfs4_state_manager

Commit 76db6d95 (nfs41: add session setup
to the state manager) introduces an infinite loop possibility in the NFSv4
state manager. By first checking nfs4_has_session() before clearing the
NFS4CLNT_SESSION_SETUP flag, it allows for a situation where someone sets
that flag, but it never gets cleared, and so the state manager loops.

In fact commit c3fad1b1 (nfs41: add session
reset to state manager) causes this to happen every time we get a network
partition error.
Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
Tested-by: NDaniel J Blueman <daniel.blueman@gmail.com>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 2584e798
...@@ -1250,8 +1250,8 @@ static void nfs4_state_manager(struct nfs_client *clp) ...@@ -1250,8 +1250,8 @@ static void nfs4_state_manager(struct nfs_client *clp)
continue; continue;
} }
/* Initialize or reset the session */ /* Initialize or reset the session */
if (nfs4_has_session(clp) && if (test_and_clear_bit(NFS4CLNT_SESSION_SETUP, &clp->cl_state)
test_and_clear_bit(NFS4CLNT_SESSION_SETUP, &clp->cl_state)) { && nfs4_has_session(clp)) {
if (clp->cl_cons_state == NFS_CS_SESSION_INITING) if (clp->cl_cons_state == NFS_CS_SESSION_INITING)
status = nfs4_initialize_session(clp); status = nfs4_initialize_session(clp);
else else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册