aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/xdr4.h
diff options
context:
space:
mode:
authorMi Jinlong <mijinlong@cn.fujitsu.com>2011-08-28 06:18:56 -0400
committerJ. Bruce Fields <bfields@redhat.com>2011-09-16 10:31:01 -0400
commit58e7b33a58d0cd07c9294d5161553b204c75662d (patch)
tree270c778b51d482789aa9b9b982bfa796c1c34992 /fs/nfsd/xdr4.h
parent038c01598e728cda5b2996c4bf883e8485b2fe50 (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.h1
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 *);
525int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *, 525int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *,
526 struct nfsd4_compoundres *); 526 struct nfsd4_compoundres *);
527int nfsd4_check_resp_size(struct nfsd4_compoundres *, u32);
527void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *); 528void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *);
528void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op); 529void 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,