summaryrefslogtreecommitdiff
path: root/fs/nfsd/nfs4xdr.c
diff options
context:
space:
mode:
authorBenny Halevy <bhalevy@panasas.com>2010-05-11 21:13:54 (GMT)
committerJ. Bruce Fields <bfields@citi.umich.edu>2010-05-13 15:58:54 (GMT)
commitd76829889ac4250a18cfcc1a606bb256bb9c570c (patch)
tree27a675ed794809b4aa2430aa3a03e4ffb0f11816 /fs/nfsd/nfs4xdr.c
parent07cd4909a6c0c275ef42fd27748226975919e336 (diff)
downloadlinux-d76829889ac4250a18cfcc1a606bb256bb9c570c.tar.xz
nfsd4: keep a reference count on client while in use
Get a refcount on the client on SEQUENCE, Release the refcount and renew the client when all respective compounds completed. Do not expire the client by the laundromat while in use. If the client was expired via another path, free it when the compounds complete and the refcount reaches 0. Note that unhash_client_locked must call list_del_init on cl_lru as it may be called twice for the same client (once from nfs4_laundromat and then from expire_client) Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Diffstat (limited to 'fs/nfsd/nfs4xdr.c')
-rw-r--r--fs/nfsd/nfs4xdr.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 5c2de47..126d0ca 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -3313,7 +3313,8 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo
dprintk("%s: SET SLOT STATE TO AVAILABLE\n", __func__);
cs->slot->sl_inuse = false;
}
- nfsd4_put_session(cs->session);
+ /* Renew the clientid on success and on replay */
+ release_session_client(cs->session);
}
return 1;
}