nfsd4: cleanup: replace rq_resused count by rq_next_page pointer
[deliverable/linux.git] / fs / nfsd / nfs3xdr.c
index 2b8618de6c27bea425a04a1b43e88668d3a99851..324c0baf7cda30c0f6123417673dc395c8e292ff 100644 (file)
@@ -325,7 +325,7 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
                                        struct nfsd3_readargs *args)
 {
        unsigned int len;
-       int v,pn;
+       int v;
        u32 max_blocksize = svc_max_payload(rqstp);
 
        if (!(p = decode_fh(p, &args->fh)))
@@ -340,8 +340,9 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p,
        /* set up the kvec */
        v=0;
        while (len > 0) {
-               pn = rqstp->rq_resused++;
-               rqstp->rq_vec[v].iov_base = page_address(rqstp->rq_respages[pn]);
+               struct page *p = *(rqstp->rq_next_page++);
+
+               rqstp->rq_vec[v].iov_base = page_address(p);
                rqstp->rq_vec[v].iov_len = len < PAGE_SIZE? len : PAGE_SIZE;
                len -= rqstp->rq_vec[v].iov_len;
                v++;
@@ -463,8 +464,7 @@ nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p,
        len = ntohl(*p++);
        if (len == 0 || len > NFS3_MAXPATHLEN || len >= PAGE_SIZE)
                return 0;
-       args->tname = new =
-               page_address(rqstp->rq_respages[rqstp->rq_resused++]);
+       args->tname = new = page_address(*(rqstp->rq_next_page++));
        args->tlen = len;
        /* first copy and check from the first page */
        old = (char*)p;
@@ -535,8 +535,7 @@ nfs3svc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p,
 {
        if (!(p = decode_fh(p, &args->fh)))
                return 0;
-       args->buffer =
-               page_address(rqstp->rq_respages[rqstp->rq_resused++]);
+       args->buffer = page_address(*(rqstp->rq_next_page++));
 
        return xdr_argsize_check(rqstp, p);
 }
@@ -567,8 +566,7 @@ nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p,
        if (args->count > PAGE_SIZE)
                args->count = PAGE_SIZE;
 
-       args->buffer =
-               page_address(rqstp->rq_respages[rqstp->rq_resused++]);
+       args->buffer = page_address(*(rqstp->rq_next_page++));
 
        return xdr_argsize_check(rqstp, p);
 }
@@ -577,7 +575,7 @@ int
 nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
                                        struct nfsd3_readdirargs *args)
 {
-       int len, pn;
+       int len;
        u32 max_blocksize = svc_max_payload(rqstp);
 
        if (!(p = decode_fh(p, &args->fh)))
@@ -592,9 +590,9 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p,
        args->count = len;
 
        while (len > 0) {
-               pn = rqstp->rq_resused++;
+               struct page *p = *(rqstp->rq_next_page++);
                if (!args->buffer)
-                       args->buffer = page_address(rqstp->rq_respages[pn]);
+                       args->buffer = page_address(p);
                len -= PAGE_SIZE;
        }
 
@@ -880,7 +878,7 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen,
                                                        common);
        __be32          *p = cd->buffer;
        caddr_t         curr_page_addr = NULL;
-       int             pn;             /* current page number */
+       struct page **  page;
        int             slen;           /* string (name) length */
        int             elen;           /* estimated entry length in words */
        int             num_entry_words = 0;    /* actual number of words */
@@ -917,8 +915,9 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen,
        }
 
        /* determine which page in rq_respages[] we are currently filling */
-       for (pn=1; pn < cd->rqstp->rq_resused; pn++) {
-               curr_page_addr = page_address(cd->rqstp->rq_respages[pn]);
+       for (page = cd->rqstp->rq_respages + 1;
+                               page < cd->rqstp->rq_next_page; page++) {
+               curr_page_addr = page_address(*page);
 
                if (((caddr_t)cd->buffer >= curr_page_addr) &&
                    ((caddr_t)cd->buffer <  curr_page_addr + PAGE_SIZE))
@@ -933,14 +932,14 @@ encode_entry(struct readdir_cd *ccd, const char *name, int namlen,
                if (plus)
                        p = encode_entryplus_baggage(cd, p, name, namlen);
                num_entry_words = p - cd->buffer;
-       } else if (cd->rqstp->rq_respages[pn+1] != NULL) {
+       } else if (*(page+1) != NULL) {
                /* temporarily encode entry into next page, then move back to
                 * current and next page in rq_respages[] */
                __be32 *p1, *tmp;
                int len1, len2;
 
                /* grab next page for temporary storage of entry */
-               p1 = tmp = page_address(cd->rqstp->rq_respages[pn+1]);
+               p1 = tmp = page_address(*(page+1));
 
                p1 = encode_entry_baggage(cd, p1, name, namlen, ino);
 
This page took 0.024991 seconds and 5 git commands to generate.