diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-01-05 16:18:59 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-01-05 16:18:59 -0500 |
| commit | 9b286efeb5eb5aaa2712873fc1f928b2f879dbde (patch) | |
| tree | 42c5509700421853533443a3e042fe2ac46a0f37 /lib | |
| parent | 47f3f4eb7834ea424b0704bffd0d3e3c8ffbc3a1 (diff) | |
| parent | e4f2283cc6ffefbe414317a0d89b602811b577ac (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull trivial vfs updates from Al Viro:
"A few cleanups + Neil's namespace_unlock() optimization"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
exec: make prepare_bprm_creds static
genheaders: %-<width>s had been there since v6; %-*s - since v7
VFS: use synchronize_rcu_expedited() in namespace_unlock()
iov_iter: reduce code duplication
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/iov_iter.c | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/lib/iov_iter.c b/lib/iov_iter.c index c93870987b58..be4bd627caf0 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c | |||
| @@ -561,13 +561,20 @@ static size_t copy_pipe_to_iter(const void *addr, size_t bytes, | |||
| 561 | return bytes; | 561 | return bytes; |
| 562 | } | 562 | } |
| 563 | 563 | ||
| 564 | static __wsum csum_and_memcpy(void *to, const void *from, size_t len, | ||
| 565 | __wsum sum, size_t off) | ||
| 566 | { | ||
| 567 | __wsum next = csum_partial_copy_nocheck(from, to, len, 0); | ||
| 568 | return csum_block_add(sum, next, off); | ||
| 569 | } | ||
| 570 | |||
| 564 | static size_t csum_and_copy_to_pipe_iter(const void *addr, size_t bytes, | 571 | static size_t csum_and_copy_to_pipe_iter(const void *addr, size_t bytes, |
| 565 | __wsum *csum, struct iov_iter *i) | 572 | __wsum *csum, struct iov_iter *i) |
| 566 | { | 573 | { |
| 567 | struct pipe_inode_info *pipe = i->pipe; | 574 | struct pipe_inode_info *pipe = i->pipe; |
| 568 | size_t n, r; | 575 | size_t n, r; |
| 569 | size_t off = 0; | 576 | size_t off = 0; |
| 570 | __wsum sum = *csum, next; | 577 | __wsum sum = *csum; |
| 571 | int idx; | 578 | int idx; |
| 572 | 579 | ||
| 573 | if (!sanity(i)) | 580 | if (!sanity(i)) |
| @@ -579,8 +586,7 @@ static size_t csum_and_copy_to_pipe_iter(const void *addr, size_t bytes, | |||
| 579 | for ( ; n; idx = next_idx(idx, pipe), r = 0) { | 586 | for ( ; n; idx = next_idx(idx, pipe), r = 0) { |
| 580 | size_t chunk = min_t(size_t, n, PAGE_SIZE - r); | 587 | size_t chunk = min_t(size_t, n, PAGE_SIZE - r); |
| 581 | char *p = kmap_atomic(pipe->bufs[idx].page); | 588 | char *p = kmap_atomic(pipe->bufs[idx].page); |
| 582 | next = csum_partial_copy_nocheck(addr, p + r, chunk, 0); | 589 | sum = csum_and_memcpy(p + r, addr, chunk, sum, off); |
| 583 | sum = csum_block_add(sum, next, off); | ||
| 584 | kunmap_atomic(p); | 590 | kunmap_atomic(p); |
| 585 | i->idx = idx; | 591 | i->idx = idx; |
| 586 | i->iov_offset = r + chunk; | 592 | i->iov_offset = r + chunk; |
| @@ -1401,17 +1407,15 @@ size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, | |||
| 1401 | err ? v.iov_len : 0; | 1407 | err ? v.iov_len : 0; |
| 1402 | }), ({ | 1408 | }), ({ |
| 1403 | char *p = kmap_atomic(v.bv_page); | 1409 | char *p = kmap_atomic(v.bv_page); |
| 1404 | next = csum_partial_copy_nocheck(p + v.bv_offset, | 1410 | sum = csum_and_memcpy((to += v.bv_len) - v.bv_len, |
| 1405 | (to += v.bv_len) - v.bv_len, | 1411 | p + v.bv_offset, v.bv_len, |
| 1406 | v.bv_len, 0); | 1412 | sum, off); |
| 1407 | kunmap_atomic(p); | 1413 | kunmap_atomic(p); |
| 1408 | sum = csum_block_add(sum, next, off); | ||
| 1409 | off += v.bv_len; | 1414 | off += v.bv_len; |
| 1410 | }),({ | 1415 | }),({ |
| 1411 | next = csum_partial_copy_nocheck(v.iov_base, | 1416 | sum = csum_and_memcpy((to += v.iov_len) - v.iov_len, |
| 1412 | (to += v.iov_len) - v.iov_len, | 1417 | v.iov_base, v.iov_len, |
| 1413 | v.iov_len, 0); | 1418 | sum, off); |
| 1414 | sum = csum_block_add(sum, next, off); | ||
| 1415 | off += v.iov_len; | 1419 | off += v.iov_len; |
| 1416 | }) | 1420 | }) |
| 1417 | ) | 1421 | ) |
| @@ -1445,17 +1449,15 @@ bool csum_and_copy_from_iter_full(void *addr, size_t bytes, __wsum *csum, | |||
| 1445 | 0; | 1449 | 0; |
| 1446 | }), ({ | 1450 | }), ({ |
| 1447 | char *p = kmap_atomic(v.bv_page); | 1451 | char *p = kmap_atomic(v.bv_page); |
| 1448 | next = csum_partial_copy_nocheck(p + v.bv_offset, | 1452 | sum = csum_and_memcpy((to += v.bv_len) - v.bv_len, |
| 1449 | (to += v.bv_len) - v.bv_len, | 1453 | p + v.bv_offset, v.bv_len, |
| 1450 | v.bv_len, 0); | 1454 | sum, off); |
| 1451 | kunmap_atomic(p); | 1455 | kunmap_atomic(p); |
| 1452 | sum = csum_block_add(sum, next, off); | ||
| 1453 | off += v.bv_len; | 1456 | off += v.bv_len; |
| 1454 | }),({ | 1457 | }),({ |
| 1455 | next = csum_partial_copy_nocheck(v.iov_base, | 1458 | sum = csum_and_memcpy((to += v.iov_len) - v.iov_len, |
| 1456 | (to += v.iov_len) - v.iov_len, | 1459 | v.iov_base, v.iov_len, |
| 1457 | v.iov_len, 0); | 1460 | sum, off); |
| 1458 | sum = csum_block_add(sum, next, off); | ||
| 1459 | off += v.iov_len; | 1461 | off += v.iov_len; |
| 1460 | }) | 1462 | }) |
| 1461 | ) | 1463 | ) |
| @@ -1493,17 +1495,15 @@ size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *csump, | |||
| 1493 | err ? v.iov_len : 0; | 1495 | err ? v.iov_len : 0; |
| 1494 | }), ({ | 1496 | }), ({ |
| 1495 | char *p = kmap_atomic(v.bv_page); | 1497 | char *p = kmap_atomic(v.bv_page); |
| 1496 | next = csum_partial_copy_nocheck((from += v.bv_len) - v.bv_len, | 1498 | sum = csum_and_memcpy(p + v.bv_offset, |
| 1497 | p + v.bv_offset, | 1499 | (from += v.bv_len) - v.bv_len, |
| 1498 | v.bv_len, 0); | 1500 | v.bv_len, sum, off); |
| 1499 | kunmap_atomic(p); | 1501 | kunmap_atomic(p); |
| 1500 | sum = csum_block_add(sum, next, off); | ||
| 1501 | off += v.bv_len; | 1502 | off += v.bv_len; |
| 1502 | }),({ | 1503 | }),({ |
| 1503 | next = csum_partial_copy_nocheck((from += v.iov_len) - v.iov_len, | 1504 | sum = csum_and_memcpy(v.iov_base, |
| 1504 | v.iov_base, | 1505 | (from += v.iov_len) - v.iov_len, |
| 1505 | v.iov_len, 0); | 1506 | v.iov_len, sum, off); |
| 1506 | sum = csum_block_add(sum, next, off); | ||
| 1507 | off += v.iov_len; | 1507 | off += v.iov_len; |
| 1508 | }) | 1508 | }) |
| 1509 | ) | 1509 | ) |
