aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4xdr.c
diff options
context:
space:
mode:
authorAndy Adamson <andros@netapp.com>2009-04-03 01:28:35 -0400
committerJ. Bruce Fields <bfields@citi.umich.edu>2009-04-03 20:41:19 -0400
commitbf864a31d50e3e94d6e76537b97d664913906ff8 (patch)
tree8de829d0cdc0c88fe523fc4a288b8e16eedc6a2e /fs/nfsd/nfs4xdr.c
parent38eb76a54d803e6792816623651b1a9cb85f8d01 (diff)
nfsd41: non-page DRC for solo sequence responses
A session inactivity time compound (lease renewal) or a compound where the sequence operation has sa_cachethis set to FALSE do not require any pages to be held in the v4.1 DRC. This is because struct nfsd4_slot is already caching the session information. Add logic to the nfs41 server to not cache response pages for solo sequence responses. Return nfserr_replay_uncached_rep on the operation following the sequence operation when sa_cachethis is FALSE. Signed-off-by: Andy Adamson <andros@netapp.com> Signed-off-by: Benny Halevy <bhalevy@panasas.com> [nfsd41: use cstate session in nfsd4_replay_cache_entry] [nfsd41: rename nfsd4_no_page_in_cache] [nfsd41 rename nfsd4_enc_no_page_replay] [nfsd41 nfsd4_is_solo_sequence] [nfsd41 change nfsd4_not_cached return] Signed-off-by: Andy Adamson <andros@netapp.com> [changed return type to bool] Signed-off-by: Benny Halevy <bhalevy@panasas.com> [nfsd41 drop parens in nfsd4_is_solo_sequence call] Signed-off-by: Andy Adamson <andros@netapp.com> [changed "== 0" to "!"] 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.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 671f9b96429b..64bc2150a6fa 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -2975,7 +2975,7 @@ nfsd4_encode_destroy_session(struct nfsd4_compoundres *resp, int nfserr,
2975 return nfserr; 2975 return nfserr;
2976} 2976}
2977 2977
2978static __be32 2978__be32
2979nfsd4_encode_sequence(struct nfsd4_compoundres *resp, int nfserr, 2979nfsd4_encode_sequence(struct nfsd4_compoundres *resp, int nfserr,
2980 struct nfsd4_sequence *seq) 2980 struct nfsd4_sequence *seq)
2981{ 2981{
@@ -3192,7 +3192,8 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo
3192 iov->iov_len = ((char*)resp->p) - (char*)iov->iov_base; 3192 iov->iov_len = ((char*)resp->p) - (char*)iov->iov_base;
3193 BUG_ON(iov->iov_len > PAGE_SIZE); 3193 BUG_ON(iov->iov_len > PAGE_SIZE);
3194 if (resp->cstate.slot != NULL) { 3194 if (resp->cstate.slot != NULL) {
3195 if (resp->cstate.status == nfserr_replay_cache) { 3195 if (resp->cstate.status == nfserr_replay_cache &&
3196 !nfsd4_not_cached(resp)) {
3196 iov->iov_len = resp->cstate.iovlen; 3197 iov->iov_len = resp->cstate.iovlen;
3197 } else { 3198 } else {
3198 nfsd4_store_cache_entry(resp); 3199 nfsd4_store_cache_entry(resp);