diff options
author | Andy Adamson <andros@netapp.com> | 2009-04-03 01:28:35 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2009-04-03 20:41:19 -0400 |
commit | bf864a31d50e3e94d6e76537b97d664913906ff8 (patch) | |
tree | 8de829d0cdc0c88fe523fc4a288b8e16eedc6a2e /fs/nfsd/nfs4xdr.c | |
parent | 38eb76a54d803e6792816623651b1a9cb85f8d01 (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.c | 5 |
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 | ||
2978 | static __be32 | 2978 | __be32 |
2979 | nfsd4_encode_sequence(struct nfsd4_compoundres *resp, int nfserr, | 2979 | nfsd4_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); |