aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs3xdr.c
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2012-12-10 18:01:37 -0500
committerJ. Bruce Fields <bfields@redhat.com>2012-12-17 22:00:16 -0500
commitafc59400d6c65bad66d4ad0b2daf879cbff8e23e (patch)
treecc4c1c4dcf01106259d4f18d637cb2d1115ef980 /fs/nfsd/nfs3xdr.c
parent79f77bf9a4e3dd5ead006b8f17e7c4ff07d8374e (diff)
nfsd4: cleanup: replace rq_resused count by rq_next_page pointer
It may be a matter of personal taste, but I find this makes the code clearer. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs3xdr.c')
-rw-r--r--fs/nfsd/nfs3xdr.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
index 2b8618de6c27..324c0baf7cda 100644
--- a/fs/nfsd/nfs3xdr.c
+++ b/fs/nfsd/nfs3xdr.c
@@ -325,7 +325,7 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
325 struct nfsd3_readargs *args) 325 struct nfsd3_readargs *args)
326{ 326{
327 unsigned int len; 327 unsigned int len;
328 int v,pn; 328 int v;
329 u32 max_blocksize = svc_max_payload(rqstp); 329 u32 max_blocksize = svc_max_payload(rqstp);
330 330
331 if (!(p = decode_fh(p, &args->fh))) 331 if (!(p = decode_fh(p, &args->fh)))
@@ -340,8 +340,9 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
340 /* set up the kvec */ 340 /* set up the kvec */
341 v=0; 341 v=0;
342 while (len > 0) { 342 while (len > 0) {
343 pn = rqstp->rq_resused++; 343 struct page *p = *(rqstp->rq_next_page++);
344 rqstp->rq_vec[v].iov_base = page_address(rqstp->rq_respages[pn]); 344
345 rqstp->rq_vec[v].iov_base = page_address(p);
345 rqstp->rq_vec[v].iov_len = len < PAGE_SIZE? len : PAGE_SIZE; 346 rqstp->rq_vec[v].iov_len = len < PAGE_SIZE? len : PAGE_SIZE;
346 len -= rqstp->rq_vec[v].iov_len; 347 len -= rqstp->rq_vec[v].iov_len;
347 v++; 348 v++;
@@ -463,8 +464,7 @@ nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p,
463 len = ntohl(*p++); 464 len = ntohl(*p++);
464 if (len == 0 || len > NFS3_MAXPATHLEN || len >= PAGE_SIZE) 465 if (len == 0 || len > NFS3_MAXPATHLEN || len >= PAGE_SIZE)
465 return 0; 466 return 0;
466 args->tname = new = 467 args->tname = new = page_address(*(rqstp->rq_next_page++));
467 page_address(rqstp->rq_respages[rqstp->rq_resused++]);
468 args->tlen = len; 468 args->tlen = len;
469 /* first copy and check from the first page */ 469 /* first copy and check from the first page */
470 old = (char*)p; 470 old = (char*)p;
@@ -535,8 +535,7 @@ nfs3svc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p,
535{ 535{
536 if (!(p = decode_fh(p, &args->fh))) 536 if (!(p = decode_fh(p, &args->fh)))
537 return 0; 537 return 0;
538 args->buffer = 538 args->buffer = page_address(*(rqstp->rq_next_page++));
539 page_address(rqstp->rq_respages[rqstp->rq_resused++]);
540 539
541 return xdr_argsize_check(rqstp, p); 540 return xdr_argsize_check(rqstp, p);
542} 541}
@@ -567,8 +566,7 @@ nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
567 if (args->count > PAGE_SIZE) 566 if (args->count > PAGE_SIZE)
568 args->count = PAGE_SIZE; 567 args->count = PAGE_SIZE;
569 568
570 args->buffer = 569 args->buffer = page_address(*(rqstp->rq_next_page++));
571 page_address(rqstp->rq_respages[rqstp->rq_resused++]);
572 570
573 return xdr_argsize_check(rqstp, p); 571 return xdr_argsize_check(rqstp, p);
574} 572}
@@ -577,7 +575,7 @@ int
577nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p, 575nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
578 struct nfsd3_readdirargs *args) 576 struct nfsd3_readdirargs *args)
579{ 577{
580 int len, pn; 578 int len;
581 u32 max_blocksize = svc_max_payload(rqstp); 579 u32 max_blocksize = svc_max_payload(rqstp);
582 580
583 if (!(p = decode_fh(p, &args->fh))) 581 if (!(p = decode_fh(p, &args->fh)))
@@ -592,9 +590,9 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
592 args->count = len; 590 args->count = len;
593 591
594 while (len > 0) { 592 while (len > 0) {
595 pn = rqstp->rq_resused++; 593 struct page *p = *(rqstp->rq_next_page++);
596 if (!args->buffer) 594 if (!args->buffer)
597 args->buffer = page_address(rqstp->rq_respages[pn]); 595 args->buffer = page_address(p);
598 len -= PAGE_SIZE; 596 len -= PAGE_SIZE;
599 } 597 }
600 598
@@ -880,7 +878,7 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen,
880 common); 878 common);
881 __be32 *p = cd->buffer; 879 __be32 *p = cd->buffer;
882 caddr_t curr_page_addr = NULL; 880 caddr_t curr_page_addr = NULL;
883 int pn; /* current page number */ 881 struct page ** page;
884 int slen; /* string (name) length */ 882 int slen; /* string (name) length */
885 int elen; /* estimated entry length in words */ 883 int elen; /* estimated entry length in words */
886 int num_entry_words = 0; /* actual number of words */ 884 int num_entry_words = 0; /* actual number of words */
@@ -917,8 +915,9 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen,
917 } 915 }
918 916
919 /* determine which page in rq_respages[] we are currently filling */ 917 /* determine which page in rq_respages[] we are currently filling */
920 for (pn=1; pn < cd->rqstp->rq_resused; pn++) { 918 for (page = cd->rqstp->rq_respages + 1;
921 curr_page_addr = page_address(cd->rqstp->rq_respages[pn]); 919 page < cd->rqstp->rq_next_page; page++) {
920 curr_page_addr = page_address(*page);
922 921
923 if (((caddr_t)cd->buffer >= curr_page_addr) && 922 if (((caddr_t)cd->buffer >= curr_page_addr) &&
924 ((caddr_t)cd->buffer < curr_page_addr + PAGE_SIZE)) 923 ((caddr_t)cd->buffer < curr_page_addr + PAGE_SIZE))
@@ -933,14 +932,14 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen,
933 if (plus) 932 if (plus)
934 p = encode_entryplus_baggage(cd, p, name, namlen); 933 p = encode_entryplus_baggage(cd, p, name, namlen);
935 num_entry_words = p - cd->buffer; 934 num_entry_words = p - cd->buffer;
936 } else if (cd->rqstp->rq_respages[pn+1] != NULL) { 935 } else if (*(page+1) != NULL) {
937 /* temporarily encode entry into next page, then move back to 936 /* temporarily encode entry into next page, then move back to
938 * current and next page in rq_respages[] */ 937 * current and next page in rq_respages[] */
939 __be32 *p1, *tmp; 938 __be32 *p1, *tmp;
940 int len1, len2; 939 int len1, len2;
941 940
942 /* grab next page for temporary storage of entry */ 941 /* grab next page for temporary storage of entry */
943 p1 = tmp = page_address(cd->rqstp->rq_respages[pn+1]); 942 p1 = tmp = page_address(*(page+1));
944 943
945 p1 = encode_entry_baggage(cd, p1, name, namlen, ino); 944 p1 = encode_entry_baggage(cd, p1, name, namlen, ino);
946 945