OSDN Git Service

NFSD: Refactor the generic write vector fill helper
[uclinux-h8/linux.git] / net / sunrpc / svc.c
index 30a4226..2194ed5 100644 (file)
@@ -1537,16 +1537,16 @@ EXPORT_SYMBOL_GPL(svc_max_payload);
 /**
  * svc_fill_write_vector - Construct data argument for VFS write call
  * @rqstp: svc_rqst to operate on
+ * @pages: list of pages containing data payload
  * @first: buffer containing first section of write payload
  * @total: total number of bytes of write payload
  *
- * Returns the number of elements populated in the data argument array.
+ * Fills in rqstp::rq_vec, and returns the number of elements.
  */
-unsigned int svc_fill_write_vector(struct svc_rqst *rqstp, struct kvec *first,
-                                  size_t total)
+unsigned int svc_fill_write_vector(struct svc_rqst *rqstp, struct page **pages,
+                                  struct kvec *first, size_t total)
 {
        struct kvec *vec = rqstp->rq_vec;
-       struct page **pages;
        unsigned int i;
 
        /* Some types of transport can present the write payload
@@ -1560,14 +1560,11 @@ unsigned int svc_fill_write_vector(struct svc_rqst *rqstp, struct kvec *first,
                ++i;
        }
 
-       WARN_ON_ONCE(rqstp->rq_arg.page_base != 0);
-       pages = rqstp->rq_arg.pages;
        while (total) {
                vec[i].iov_base = page_address(*pages);
                vec[i].iov_len = min_t(size_t, total, PAGE_SIZE);
                total -= vec[i].iov_len;
                ++i;
-
                ++pages;
        }