diff options
author | Mi Jinlong <mijinlong@cn.fujitsu.com> | 2011-08-28 06:18:56 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2011-09-16 10:31:01 -0400 |
commit | 58e7b33a58d0cd07c9294d5161553b204c75662d (patch) | |
tree | 270c778b51d482789aa9b9b982bfa796c1c34992 /fs/nfsd/xdr4.h | |
parent | 038c01598e728cda5b2996c4bf883e8485b2fe50 (diff) |
nfsd41: try to check reply size before operation
For checking the size of reply before calling a operation,
we need try to get maxsize of the operation's reply.
v3: using new method as Bruce said,
"we could handle operations in two different ways:
- For operations that actually change something (write, rename,
open, close, ...), do it the way we're doing it now: be
very careful to estimate the size of the response before even
processing the operation.
- For operations that don't change anything (read, getattr, ...)
just go ahead and do the operation. If you realize after the
fact that the response is too large, then return the error at
that point.
So we'd add another flag to op_flags: say, OP_MODIFIES_SOMETHING. And for
operations with OP_MODIFIES_SOMETHING set, we'd do the first thing. For
operations without it set, we'd do the second."
Signed-off-by: Mi Jinlong <mijinlong@cn.fujitsu.com>
[bfields@redhat.com: crash, don't attempt to handle, undefined op_rsize_bop]
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/xdr4.h')
-rw-r--r-- | fs/nfsd/xdr4.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index f95a72482064..a767b57b8208 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h | |||
@@ -524,6 +524,7 @@ int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *, | |||
524 | struct nfsd4_compoundargs *); | 524 | struct nfsd4_compoundargs *); |
525 | int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *, | 525 | int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *, |
526 | struct nfsd4_compoundres *); | 526 | struct nfsd4_compoundres *); |
527 | int nfsd4_check_resp_size(struct nfsd4_compoundres *, u32); | ||
527 | void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *); | 528 | void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *); |
528 | void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op); | 529 | void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op); |
529 | __be32 nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, | 530 | __be32 nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, |