aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-01-05 16:18:59 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2019-01-05 16:18:59 -0500
commit9b286efeb5eb5aaa2712873fc1f928b2f879dbde (patch)
tree42c5509700421853533443a3e042fe2ac46a0f37 /lib
parent47f3f4eb7834ea424b0704bffd0d3e3c8ffbc3a1 (diff)
parente4f2283cc6ffefbe414317a0d89b602811b577ac (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.c54
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
564static __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
564static size_t csum_and_copy_to_pipe_iter(const void *addr, size_t bytes, 571static 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 )