diff options
author | J. Bruce Fields <bfields@redhat.com> | 2012-12-10 18:01:37 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-12-17 22:00:16 -0500 |
commit | afc59400d6c65bad66d4ad0b2daf879cbff8e23e (patch) | |
tree | cc4c1c4dcf01106259d4f18d637cb2d1115ef980 /fs/nfsd/nfs3xdr.c | |
parent | 79f77bf9a4e3dd5ead006b8f17e7c4ff07d8374e (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.c | 33 |
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 | |||
577 | nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p, | 575 | nfs3svc_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 | ||