diff options
Diffstat (limited to 'fs/nfsd/nfs3xdr.c')
-rw-r--r-- | fs/nfsd/nfs3xdr.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c index 4b9aefbcc93c..247d518248bf 100644 --- a/fs/nfsd/nfs3xdr.c +++ b/fs/nfsd/nfs3xdr.c | |||
@@ -330,6 +330,7 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, u32 *p, | |||
330 | { | 330 | { |
331 | unsigned int len; | 331 | unsigned int len; |
332 | int v,pn; | 332 | int v,pn; |
333 | u32 max_blocksize = svc_max_payload(rqstp); | ||
333 | 334 | ||
334 | if (!(p = decode_fh(p, &args->fh)) | 335 | if (!(p = decode_fh(p, &args->fh)) |
335 | || !(p = xdr_decode_hyper(p, &args->offset))) | 336 | || !(p = xdr_decode_hyper(p, &args->offset))) |
@@ -337,8 +338,8 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, u32 *p, | |||
337 | 338 | ||
338 | len = args->count = ntohl(*p++); | 339 | len = args->count = ntohl(*p++); |
339 | 340 | ||
340 | if (len > NFSSVC_MAXBLKSIZE) | 341 | if (len > max_blocksize) |
341 | len = NFSSVC_MAXBLKSIZE; | 342 | len = max_blocksize; |
342 | 343 | ||
343 | /* set up the kvec */ | 344 | /* set up the kvec */ |
344 | v=0; | 345 | v=0; |
@@ -358,6 +359,7 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, u32 *p, | |||
358 | struct nfsd3_writeargs *args) | 359 | struct nfsd3_writeargs *args) |
359 | { | 360 | { |
360 | unsigned int len, v, hdr; | 361 | unsigned int len, v, hdr; |
362 | u32 max_blocksize = svc_max_payload(rqstp); | ||
361 | 363 | ||
362 | if (!(p = decode_fh(p, &args->fh)) | 364 | if (!(p = decode_fh(p, &args->fh)) |
363 | || !(p = xdr_decode_hyper(p, &args->offset))) | 365 | || !(p = xdr_decode_hyper(p, &args->offset))) |
@@ -375,8 +377,8 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, u32 *p, | |||
375 | rqstp->rq_vec[0].iov_base = (void*)p; | 377 | rqstp->rq_vec[0].iov_base = (void*)p; |
376 | rqstp->rq_vec[0].iov_len = rqstp->rq_arg.head[0].iov_len - hdr; | 378 | rqstp->rq_vec[0].iov_len = rqstp->rq_arg.head[0].iov_len - hdr; |
377 | 379 | ||
378 | if (len > NFSSVC_MAXBLKSIZE) | 380 | if (len > max_blocksize) |
379 | len = NFSSVC_MAXBLKSIZE; | 381 | len = max_blocksize; |
380 | v= 0; | 382 | v= 0; |
381 | while (len > rqstp->rq_vec[v].iov_len) { | 383 | while (len > rqstp->rq_vec[v].iov_len) { |
382 | len -= rqstp->rq_vec[v].iov_len; | 384 | len -= rqstp->rq_vec[v].iov_len; |
@@ -564,6 +566,7 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, u32 *p, | |||
564 | struct nfsd3_readdirargs *args) | 566 | struct nfsd3_readdirargs *args) |
565 | { | 567 | { |
566 | int len, pn; | 568 | int len, pn; |
569 | u32 max_blocksize = svc_max_payload(rqstp); | ||
567 | 570 | ||
568 | if (!(p = decode_fh(p, &args->fh))) | 571 | if (!(p = decode_fh(p, &args->fh))) |
569 | return 0; | 572 | return 0; |
@@ -572,7 +575,7 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, u32 *p, | |||
572 | args->dircount = ntohl(*p++); | 575 | args->dircount = ntohl(*p++); |
573 | args->count = ntohl(*p++); | 576 | args->count = ntohl(*p++); |
574 | 577 | ||
575 | len = (args->count > NFSSVC_MAXBLKSIZE) ? NFSSVC_MAXBLKSIZE : | 578 | len = (args->count > max_blocksize) ? max_blocksize : |
576 | args->count; | 579 | args->count; |
577 | args->count = len; | 580 | args->count = len; |
578 | 581 | ||