From: Chuck Lever <chuck.lever@xxxxxxxxxx> If we can get rid of all uses of rq_vec, then it can be removed. Replace one use of rqstp::rq_vec with rqstp::rq_bvec. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> --- fs/nfsd/vfs.c | 2 +- net/sunrpc/svc.c | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 9673ab33ee5d..334bdf8a576d 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1204,7 +1204,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, if (stable && !fhp->fh_use_wgather) flags |= RWF_SYNC; - iov_iter_kvec(&iter, ITER_SOURCE, rqstp->rq_vec, nvecs, *cnt); + iov_iter_bvec(&iter, ITER_SOURCE, rqstp->rq_bvec, nvecs, *cnt); since = READ_ONCE(file->f_wb_err); if (verf) nfsd_copy_write_verifier(verf, nn); diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 7ad65e562470..77e9c180f48b 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -1727,35 +1727,38 @@ EXPORT_SYMBOL_GPL(svc_encode_result_payload); /** * svc_fill_write_vector - Construct data argument for VFS write call - * @rqstp: svc_rqst to operate on + * @rqstp: RPC execution context * @payload: xdr_buf containing only the write data payload * - * Fills in rqstp::rq_vec, and returns the number of elements. + * Fills in @rqstp->rq_bvec, and returns the number of elements it + * populated in that array. */ unsigned int svc_fill_write_vector(struct svc_rqst *rqstp, const struct xdr_buf *payload) { const struct kvec *first = payload->head; struct page **pages = payload->pages; - struct kvec *vec = rqstp->rq_vec; + struct bio_vec *vec = rqstp->rq_bvec; size_t total = payload->len; - unsigned int i; + unsigned int base, len, i; /* Some types of transport can present the write payload * entirely in rq_arg.pages. In this case, @first is empty. */ i = 0; if (first->iov_len) { - vec[i].iov_base = first->iov_base; - vec[i].iov_len = min_t(size_t, total, first->iov_len); - total -= vec[i].iov_len; + len = min_t(size_t, total, first->iov_len); + bvec_set_virt(&vec[i], first->iov_base, len); + total -= len; ++i; } + base = payload->page_base; 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; + len = min_t(size_t, total, PAGE_SIZE); + bvec_set_page(&vec[i], *pages, len, base); + total -= len; + base = 0; ++i; ++pages; } -- 2.49.0