diff options
author | Christoph Hellwig <hch@lst.de> | 2015-04-30 11:49:24 +0200 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2015-05-04 18:02:41 +0200 |
commit | cba5f62b1830c1919b47544789bc993e6e617dc6 (patch) | |
tree | 6f85f8982fe083ea576b7938799e56fe4d675bec /fs/nfsd/nfs4state.c | |
parent | nfsd: split transport vs operation errors for callbacks (diff) | |
download | linux-cba5f62b1830c1919b47544789bc993e6e617dc6.tar.xz linux-cba5f62b1830c1919b47544789bc993e6e617dc6.zip |
nfsd: fix callback restarts
Checking the rpc_client pointer is not a reliable way to detect
backchannel changes: cl_cb_client is changed only after shutting down
the rpc client, so the condition cl_cb_client = tk_client will always be
true.
Check the RPC_TASK_KILLED flag instead, and rewrite the code to avoid
the buggy cl_callbacks list and fix the lifetime rules due to double
calls of the ->prepare callback operations method for this retry case.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r-- | fs/nfsd/nfs4state.c | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 66067a291267..039f9c8a95e8 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -1626,7 +1626,6 @@ static struct nfs4_client *alloc_client(struct xdr_netobj name) INIT_LIST_HEAD(&clp->cl_openowners); INIT_LIST_HEAD(&clp->cl_delegations); INIT_LIST_HEAD(&clp->cl_lru); - INIT_LIST_HEAD(&clp->cl_callbacks); INIT_LIST_HEAD(&clp->cl_revoked); #ifdef CONFIG_NFSD_PNFS INIT_LIST_HEAD(&clp->cl_lo_states); |