diff options
author | J. Bruce Fields <bfields@redhat.com> | 2017-04-25 16:21:34 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2017-04-25 16:36:16 -0400 |
commit | db44bac41bbfc0c0d9dd943092d8bded3c9db19b (patch) | |
tree | 635a22d9be0a97d340594954d90a23657b39c09a /fs/nfsd | |
parent | e6838a29ecb484c97e4efef9429643b9851fba6e (diff) |
nfsd4: minor NFSv2/v3 write decoding cleanup
Use a couple shortcuts that will simplify a following bugfix.
Cc: stable@vger.kernel.org
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfs3xdr.c | 9 | ||||
-rw-r--r-- | fs/nfsd/nfsxdr.c | 8 |
2 files changed, 9 insertions, 8 deletions
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c index dba2ff8eaa68..d18cfddbe115 100644 --- a/fs/nfsd/nfs3xdr.c +++ b/fs/nfsd/nfs3xdr.c | |||
@@ -358,6 +358,8 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, | |||
358 | { | 358 | { |
359 | unsigned int len, v, hdr, dlen; | 359 | unsigned int len, v, hdr, dlen; |
360 | u32 max_blocksize = svc_max_payload(rqstp); | 360 | u32 max_blocksize = svc_max_payload(rqstp); |
361 | struct kvec *head = rqstp->rq_arg.head; | ||
362 | struct kvec *tail = rqstp->rq_arg.tail; | ||
361 | 363 | ||
362 | p = decode_fh(p, &args->fh); | 364 | p = decode_fh(p, &args->fh); |
363 | if (!p) | 365 | if (!p) |
@@ -377,9 +379,8 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, | |||
377 | * Check to make sure that we got the right number of | 379 | * Check to make sure that we got the right number of |
378 | * bytes. | 380 | * bytes. |
379 | */ | 381 | */ |
380 | hdr = (void*)p - rqstp->rq_arg.head[0].iov_base; | 382 | hdr = (void*)p - head->iov_base; |
381 | dlen = rqstp->rq_arg.head[0].iov_len + rqstp->rq_arg.page_len | 383 | dlen = head->iov_len + rqstp->rq_arg.page_len + tail->iov_len - hdr; |
382 | + rqstp->rq_arg.tail[0].iov_len - hdr; | ||
383 | /* | 384 | /* |
384 | * Round the length of the data which was specified up to | 385 | * Round the length of the data which was specified up to |
385 | * the next multiple of XDR units and then compare that | 386 | * the next multiple of XDR units and then compare that |
@@ -396,7 +397,7 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, | |||
396 | len = args->len = max_blocksize; | 397 | len = args->len = max_blocksize; |
397 | } | 398 | } |
398 | rqstp->rq_vec[0].iov_base = (void*)p; | 399 | rqstp->rq_vec[0].iov_base = (void*)p; |
399 | rqstp->rq_vec[0].iov_len = rqstp->rq_arg.head[0].iov_len - hdr; | 400 | rqstp->rq_vec[0].iov_len = head->iov_len - hdr; |
400 | v = 0; | 401 | v = 0; |
401 | while (len > rqstp->rq_vec[v].iov_len) { | 402 | while (len > rqstp->rq_vec[v].iov_len) { |
402 | len -= rqstp->rq_vec[v].iov_len; | 403 | len -= rqstp->rq_vec[v].iov_len; |
diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c index 41b468a6a90f..59bd88a23a3d 100644 --- a/fs/nfsd/nfsxdr.c +++ b/fs/nfsd/nfsxdr.c | |||
@@ -280,6 +280,7 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, | |||
280 | struct nfsd_writeargs *args) | 280 | struct nfsd_writeargs *args) |
281 | { | 281 | { |
282 | unsigned int len, hdr, dlen; | 282 | unsigned int len, hdr, dlen; |
283 | struct kvec *head = rqstp->rq_arg.head; | ||
283 | int v; | 284 | int v; |
284 | 285 | ||
285 | p = decode_fh(p, &args->fh); | 286 | p = decode_fh(p, &args->fh); |
@@ -300,9 +301,8 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, | |||
300 | * Check to make sure that we got the right number of | 301 | * Check to make sure that we got the right number of |
301 | * bytes. | 302 | * bytes. |
302 | */ | 303 | */ |
303 | hdr = (void*)p - rqstp->rq_arg.head[0].iov_base; | 304 | hdr = (void*)p - head->iov_base; |
304 | dlen = rqstp->rq_arg.head[0].iov_len + rqstp->rq_arg.page_len | 305 | dlen = head->iov_len + rqstp->rq_arg.page_len - hdr; |
305 | - hdr; | ||
306 | 306 | ||
307 | /* | 307 | /* |
308 | * Round the length of the data which was specified up to | 308 | * Round the length of the data which was specified up to |
@@ -316,7 +316,7 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, | |||
316 | return 0; | 316 | return 0; |
317 | 317 | ||
318 | rqstp->rq_vec[0].iov_base = (void*)p; | 318 | rqstp->rq_vec[0].iov_base = (void*)p; |
319 | rqstp->rq_vec[0].iov_len = rqstp->rq_arg.head[0].iov_len - hdr; | 319 | rqstp->rq_vec[0].iov_len = head->iov_len - hdr; |
320 | v = 0; | 320 | v = 0; |
321 | while (len > rqstp->rq_vec[v].iov_len) { | 321 | while (len > rqstp->rq_vec[v].iov_len) { |
322 | len -= rqstp->rq_vec[v].iov_len; | 322 | len -= rqstp->rq_vec[v].iov_len; |