diff options
author | J. Bruce Fields <bfields@redhat.com> | 2012-11-16 14:16:46 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-11-26 09:08:14 -0500 |
commit | 70cc7f75b1ee4161dfdea1012223db25712ab1a5 (patch) | |
tree | 4e9756cce119094f08a7bbeb52b5487c31790b8a /fs/nfsd/nfs4xdr.c | |
parent | 5a80a54d21c96590d013378d8c5f65f879451ab4 (diff) |
nfsd4: move more write parameters into xdr argument
In preparation for moving some of this elsewhere.
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs4xdr.c')
-rw-r--r-- | fs/nfsd/nfs4xdr.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 579dc707bad9..cb9f9017af8f 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c | |||
@@ -1139,16 +1139,17 @@ nfsd4_decode_verify(struct nfsd4_compoundargs *argp, struct nfsd4_verify *verify | |||
1139 | DECODE_TAIL; | 1139 | DECODE_TAIL; |
1140 | } | 1140 | } |
1141 | 1141 | ||
1142 | static int fill_in_write_vector(struct kvec *vec, struct kvec *head, struct page **pagelist, int buflen) | 1142 | static int fill_in_write_vector(struct kvec *vec, struct nfsd4_write *write) |
1143 | { | 1143 | { |
1144 | int i = 1; | 1144 | int i = 1; |
1145 | int buflen = write->wr_buflen; | ||
1145 | 1146 | ||
1146 | vec[0].iov_base = head->iov_base; | 1147 | vec[0].iov_base = write->wr_head.iov_base; |
1147 | vec[0].iov_len = min_t(int, buflen, head->iov_len); | 1148 | vec[0].iov_len = min_t(int, buflen, write->wr_head.iov_len); |
1148 | buflen -= vec[0].iov_len; | 1149 | buflen -= vec[0].iov_len; |
1149 | 1150 | ||
1150 | while (buflen) { | 1151 | while (buflen) { |
1151 | vec[i].iov_base = page_address(pagelist[i - 1]); | 1152 | vec[i].iov_base = page_address(write->wr_pagelist[i - 1]); |
1152 | vec[i].iov_len = min_t(int, PAGE_SIZE, buflen); | 1153 | vec[i].iov_len = min_t(int, PAGE_SIZE, buflen); |
1153 | buflen -= vec[i].iov_len; | 1154 | buflen -= vec[i].iov_len; |
1154 | i++; | 1155 | i++; |
@@ -1161,8 +1162,6 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) | |||
1161 | { | 1162 | { |
1162 | int avail; | 1163 | int avail; |
1163 | int len; | 1164 | int len; |
1164 | struct page **pagelist; | ||
1165 | struct kvec head; | ||
1166 | DECODE_HEAD; | 1165 | DECODE_HEAD; |
1167 | 1166 | ||
1168 | status = nfsd4_decode_stateid(argp, &write->wr_stateid); | 1167 | status = nfsd4_decode_stateid(argp, &write->wr_stateid); |
@@ -1185,10 +1184,10 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) | |||
1185 | __FILE__, __LINE__); | 1184 | __FILE__, __LINE__); |
1186 | goto xdr_error; | 1185 | goto xdr_error; |
1187 | } | 1186 | } |
1188 | head.iov_base = p; | 1187 | write->wr_head.iov_base = p; |
1189 | head.iov_len = avail; | 1188 | write->wr_head.iov_len = avail; |
1190 | WARN_ON(avail != (XDR_QUADLEN(avail) << 2)); | 1189 | WARN_ON(avail != (XDR_QUADLEN(avail) << 2)); |
1191 | pagelist = argp->pagelist; | 1190 | write->wr_pagelist = argp->pagelist; |
1192 | 1191 | ||
1193 | len = XDR_QUADLEN(write->wr_buflen) << 2; | 1192 | len = XDR_QUADLEN(write->wr_buflen) << 2; |
1194 | if (len >= avail) { | 1193 | if (len >= avail) { |
@@ -1205,8 +1204,7 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) | |||
1205 | argp->end = argp->p + XDR_QUADLEN(PAGE_SIZE); | 1204 | argp->end = argp->p + XDR_QUADLEN(PAGE_SIZE); |
1206 | } | 1205 | } |
1207 | argp->p += XDR_QUADLEN(len); | 1206 | argp->p += XDR_QUADLEN(len); |
1208 | write->wr_vlen = fill_in_write_vector(argp->rqstp->rq_vec, | 1207 | write->wr_vlen = fill_in_write_vector(argp->rqstp->rq_vec, write); |
1209 | &head, pagelist, write->wr_buflen); | ||
1210 | WARN_ON_ONCE(write->wr_vlen > ARRAY_SIZE(argp->rqstp->rq_vec)); | 1208 | WARN_ON_ONCE(write->wr_vlen > ARRAY_SIZE(argp->rqstp->rq_vec)); |
1211 | 1209 | ||
1212 | DECODE_TAIL; | 1210 | DECODE_TAIL; |