diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfsd/nfs3proc.c | 14 | ||||
-rw-r--r-- | fs/nfsd/nfs3xdr.c | 13 | ||||
-rw-r--r-- | fs/nfsd/nfs4xdr.c | 6 | ||||
-rw-r--r-- | fs/nfsd/nfsproc.c | 6 | ||||
-rw-r--r-- | fs/nfsd/nfsxdr.c | 10 |
5 files changed, 27 insertions, 22 deletions
diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c index 0c4fab018791..a5ebc7dbb384 100644 --- a/fs/nfsd/nfs3proc.c +++ b/fs/nfsd/nfs3proc.c | |||
@@ -160,6 +160,7 @@ nfsd3_proc_read(struct svc_rqst *rqstp, struct nfsd3_readargs *argp, | |||
160 | struct nfsd3_readres *resp) | 160 | struct nfsd3_readres *resp) |
161 | { | 161 | { |
162 | int nfserr; | 162 | int nfserr; |
163 | u32 max_blocksize = svc_max_payload(rqstp); | ||
163 | 164 | ||
164 | dprintk("nfsd: READ(3) %s %lu bytes at %lu\n", | 165 | dprintk("nfsd: READ(3) %s %lu bytes at %lu\n", |
165 | SVCFH_fmt(&argp->fh), | 166 | SVCFH_fmt(&argp->fh), |
@@ -172,8 +173,8 @@ nfsd3_proc_read(struct svc_rqst *rqstp, struct nfsd3_readargs *argp, | |||
172 | */ | 173 | */ |
173 | 174 | ||
174 | resp->count = argp->count; | 175 | resp->count = argp->count; |
175 | if (NFSSVC_MAXBLKSIZE < resp->count) | 176 | if (max_blocksize < resp->count) |
176 | resp->count = NFSSVC_MAXBLKSIZE; | 177 | resp->count = max_blocksize; |
177 | 178 | ||
178 | svc_reserve(rqstp, ((1 + NFS3_POST_OP_ATTR_WORDS + 3)<<2) + resp->count +4); | 179 | svc_reserve(rqstp, ((1 + NFS3_POST_OP_ATTR_WORDS + 3)<<2) + resp->count +4); |
179 | 180 | ||
@@ -538,15 +539,16 @@ nfsd3_proc_fsinfo(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, | |||
538 | struct nfsd3_fsinfores *resp) | 539 | struct nfsd3_fsinfores *resp) |
539 | { | 540 | { |
540 | int nfserr; | 541 | int nfserr; |
542 | u32 max_blocksize = svc_max_payload(rqstp); | ||
541 | 543 | ||
542 | dprintk("nfsd: FSINFO(3) %s\n", | 544 | dprintk("nfsd: FSINFO(3) %s\n", |
543 | SVCFH_fmt(&argp->fh)); | 545 | SVCFH_fmt(&argp->fh)); |
544 | 546 | ||
545 | resp->f_rtmax = NFSSVC_MAXBLKSIZE; | 547 | resp->f_rtmax = max_blocksize; |
546 | resp->f_rtpref = NFSSVC_MAXBLKSIZE; | 548 | resp->f_rtpref = max_blocksize; |
547 | resp->f_rtmult = PAGE_SIZE; | 549 | resp->f_rtmult = PAGE_SIZE; |
548 | resp->f_wtmax = NFSSVC_MAXBLKSIZE; | 550 | resp->f_wtmax = max_blocksize; |
549 | resp->f_wtpref = NFSSVC_MAXBLKSIZE; | 551 | resp->f_wtpref = max_blocksize; |
550 | resp->f_wtmult = PAGE_SIZE; | 552 | resp->f_wtmult = PAGE_SIZE; |
551 | resp->f_dtpref = PAGE_SIZE; | 553 | resp->f_dtpref = PAGE_SIZE; |
552 | resp->f_maxfilesize = ~(u32) 0; | 554 | resp->f_maxfilesize = ~(u32) 0; |
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 | ||
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index df341956254e..4cfacc557b40 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c | |||
@@ -1536,12 +1536,12 @@ out_acl: | |||
1536 | if (bmval0 & FATTR4_WORD0_MAXREAD) { | 1536 | if (bmval0 & FATTR4_WORD0_MAXREAD) { |
1537 | if ((buflen -= 8) < 0) | 1537 | if ((buflen -= 8) < 0) |
1538 | goto out_resource; | 1538 | goto out_resource; |
1539 | WRITE64((u64) NFSSVC_MAXBLKSIZE); | 1539 | WRITE64((u64) svc_max_payload(rqstp)); |
1540 | } | 1540 | } |
1541 | if (bmval0 & FATTR4_WORD0_MAXWRITE) { | 1541 | if (bmval0 & FATTR4_WORD0_MAXWRITE) { |
1542 | if ((buflen -= 8) < 0) | 1542 | if ((buflen -= 8) < 0) |
1543 | goto out_resource; | 1543 | goto out_resource; |
1544 | WRITE64((u64) NFSSVC_MAXBLKSIZE); | 1544 | WRITE64((u64) svc_max_payload(rqstp)); |
1545 | } | 1545 | } |
1546 | if (bmval1 & FATTR4_WORD1_MODE) { | 1546 | if (bmval1 & FATTR4_WORD1_MODE) { |
1547 | if ((buflen -= 4) < 0) | 1547 | if ((buflen -= 4) < 0) |
@@ -2055,7 +2055,7 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, int nfserr, | |||
2055 | 2055 | ||
2056 | RESERVE_SPACE(8); /* eof flag and byte count */ | 2056 | RESERVE_SPACE(8); /* eof flag and byte count */ |
2057 | 2057 | ||
2058 | maxcount = NFSSVC_MAXBLKSIZE; | 2058 | maxcount = svc_max_payload(resp->rqstp); |
2059 | if (maxcount > read->rd_length) | 2059 | if (maxcount > read->rd_length) |
2060 | maxcount = read->rd_length; | 2060 | maxcount = read->rd_length; |
2061 | 2061 | ||
diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c index ca4973150218..9ee1dab5d44a 100644 --- a/fs/nfsd/nfsproc.c +++ b/fs/nfsd/nfsproc.c | |||
@@ -146,13 +146,13 @@ nfsd_proc_read(struct svc_rqst *rqstp, struct nfsd_readargs *argp, | |||
146 | * status, 17 words for fattr, and 1 word for the byte count. | 146 | * status, 17 words for fattr, and 1 word for the byte count. |
147 | */ | 147 | */ |
148 | 148 | ||
149 | if (NFSSVC_MAXBLKSIZE < argp->count) { | 149 | if (NFSSVC_MAXBLKSIZE_V2 < argp->count) { |
150 | printk(KERN_NOTICE | 150 | printk(KERN_NOTICE |
151 | "oversized read request from %u.%u.%u.%u:%d (%d bytes)\n", | 151 | "oversized read request from %u.%u.%u.%u:%d (%d bytes)\n", |
152 | NIPQUAD(rqstp->rq_addr.sin_addr.s_addr), | 152 | NIPQUAD(rqstp->rq_addr.sin_addr.s_addr), |
153 | ntohs(rqstp->rq_addr.sin_port), | 153 | ntohs(rqstp->rq_addr.sin_port), |
154 | argp->count); | 154 | argp->count); |
155 | argp->count = NFSSVC_MAXBLKSIZE; | 155 | argp->count = NFSSVC_MAXBLKSIZE_V2; |
156 | } | 156 | } |
157 | svc_reserve(rqstp, (19<<2) + argp->count + 4); | 157 | svc_reserve(rqstp, (19<<2) + argp->count + 4); |
158 | 158 | ||
@@ -553,7 +553,7 @@ static struct svc_procedure nfsd_procedures2[18] = { | |||
553 | PROC(none, void, void, none, RC_NOCACHE, ST), | 553 | PROC(none, void, void, none, RC_NOCACHE, ST), |
554 | PROC(lookup, diropargs, diropres, fhandle, RC_NOCACHE, ST+FH+AT), | 554 | PROC(lookup, diropargs, diropres, fhandle, RC_NOCACHE, ST+FH+AT), |
555 | PROC(readlink, readlinkargs, readlinkres, none, RC_NOCACHE, ST+1+NFS_MAXPATHLEN/4), | 555 | PROC(readlink, readlinkargs, readlinkres, none, RC_NOCACHE, ST+1+NFS_MAXPATHLEN/4), |
556 | PROC(read, readargs, readres, fhandle, RC_NOCACHE, ST+AT+1+NFSSVC_MAXBLKSIZE/4), | 556 | PROC(read, readargs, readres, fhandle, RC_NOCACHE, ST+AT+1+NFSSVC_MAXBLKSIZE_V2/4), |
557 | PROC(none, void, void, none, RC_NOCACHE, ST), | 557 | PROC(none, void, void, none, RC_NOCACHE, ST), |
558 | PROC(write, writeargs, attrstat, fhandle, RC_REPLBUFF, ST+AT), | 558 | PROC(write, writeargs, attrstat, fhandle, RC_REPLBUFF, ST+AT), |
559 | PROC(create, createargs, diropres, fhandle, RC_REPLBUFF, ST+FH+AT), | 559 | PROC(create, createargs, diropres, fhandle, RC_REPLBUFF, ST+FH+AT), |
diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c index ab6745e78d16..1135c0d14557 100644 --- a/fs/nfsd/nfsxdr.c +++ b/fs/nfsd/nfsxdr.c | |||
@@ -254,8 +254,8 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, u32 *p, | |||
254 | len = args->count = ntohl(*p++); | 254 | len = args->count = ntohl(*p++); |
255 | p++; /* totalcount - unused */ | 255 | p++; /* totalcount - unused */ |
256 | 256 | ||
257 | if (len > NFSSVC_MAXBLKSIZE) | 257 | if (len > NFSSVC_MAXBLKSIZE_V2) |
258 | len = NFSSVC_MAXBLKSIZE; | 258 | len = NFSSVC_MAXBLKSIZE_V2; |
259 | 259 | ||
260 | /* set up somewhere to store response. | 260 | /* set up somewhere to store response. |
261 | * We take pages, put them on reslist and include in iovec | 261 | * We take pages, put them on reslist and include in iovec |
@@ -288,8 +288,8 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, u32 *p, | |||
288 | rqstp->rq_vec[0].iov_base = (void*)p; | 288 | rqstp->rq_vec[0].iov_base = (void*)p; |
289 | rqstp->rq_vec[0].iov_len = rqstp->rq_arg.head[0].iov_len - | 289 | rqstp->rq_vec[0].iov_len = rqstp->rq_arg.head[0].iov_len - |
290 | (((void*)p) - rqstp->rq_arg.head[0].iov_base); | 290 | (((void*)p) - rqstp->rq_arg.head[0].iov_base); |
291 | if (len > NFSSVC_MAXBLKSIZE) | 291 | if (len > NFSSVC_MAXBLKSIZE_V2) |
292 | len = NFSSVC_MAXBLKSIZE; | 292 | len = NFSSVC_MAXBLKSIZE_V2; |
293 | v = 0; | 293 | v = 0; |
294 | while (len > rqstp->rq_vec[v].iov_len) { | 294 | while (len > rqstp->rq_vec[v].iov_len) { |
295 | len -= rqstp->rq_vec[v].iov_len; | 295 | len -= rqstp->rq_vec[v].iov_len; |
@@ -458,7 +458,7 @@ nfssvc_encode_statfsres(struct svc_rqst *rqstp, u32 *p, | |||
458 | { | 458 | { |
459 | struct kstatfs *stat = &resp->stats; | 459 | struct kstatfs *stat = &resp->stats; |
460 | 460 | ||
461 | *p++ = htonl(NFSSVC_MAXBLKSIZE); /* max transfer size */ | 461 | *p++ = htonl(NFSSVC_MAXBLKSIZE_V2); /* max transfer size */ |
462 | *p++ = htonl(stat->f_bsize); | 462 | *p++ = htonl(stat->f_bsize); |
463 | *p++ = htonl(stat->f_blocks); | 463 | *p++ = htonl(stat->f_blocks); |
464 | *p++ = htonl(stat->f_bfree); | 464 | *p++ = htonl(stat->f_bfree); |