diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-14 14:59:43 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-14 14:59:43 -0400 |
commit | 6ba5b85fd4b1bd72ba26cb7d50c7580004df68ac (patch) | |
tree | 220be21f6f5597e0e864d2efce3b685e914b7a20 /lib | |
parent | 1410b74e4061e05a5d2bffb1f99829efce27c8a9 (diff) | |
parent | e4d35be584be88a3db3fa5635a97c62a2ec5aafe (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs fixes from Al Viro:
"Overlayfs fixes from Miklos, assorted fixes from me.
Stable fodder of varying severity, all sat in -next for a while"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
ovl: ignore permissions on underlying lookup
vfs: add lookup_hash() helper
vfs: rename: check backing inode being equal
vfs: add vfs_select_inode() helper
get_rock_ridge_filename(): handle malformed NM entries
ecryptfs: fix handling of directory opening
atomic_open(): fix the handling of create_error
fix the copy vs. map logics in blk_rq_map_user_iov()
do_splice_to(): cap the size before passing to ->splice_read()
Diffstat (limited to 'lib')
-rw-r--r-- | lib/iov_iter.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/iov_iter.c b/lib/iov_iter.c index 5fecddc32b1b..ca5316e0087b 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c | |||
@@ -569,6 +569,25 @@ unsigned long iov_iter_alignment(const struct iov_iter *i) | |||
569 | } | 569 | } |
570 | EXPORT_SYMBOL(iov_iter_alignment); | 570 | EXPORT_SYMBOL(iov_iter_alignment); |
571 | 571 | ||
572 | unsigned long iov_iter_gap_alignment(const struct iov_iter *i) | ||
573 | { | ||
574 | unsigned long res = 0; | ||
575 | size_t size = i->count; | ||
576 | if (!size) | ||
577 | return 0; | ||
578 | |||
579 | iterate_all_kinds(i, size, v, | ||
580 | (res |= (!res ? 0 : (unsigned long)v.iov_base) | | ||
581 | (size != v.iov_len ? size : 0), 0), | ||
582 | (res |= (!res ? 0 : (unsigned long)v.bv_offset) | | ||
583 | (size != v.bv_len ? size : 0)), | ||
584 | (res |= (!res ? 0 : (unsigned long)v.iov_base) | | ||
585 | (size != v.iov_len ? size : 0)) | ||
586 | ); | ||
587 | return res; | ||
588 | } | ||
589 | EXPORT_SYMBOL(iov_iter_gap_alignment); | ||
590 | |||
572 | ssize_t iov_iter_get_pages(struct iov_iter *i, | 591 | ssize_t iov_iter_get_pages(struct iov_iter *i, |
573 | struct page **pages, size_t maxsize, unsigned maxpages, | 592 | struct page **pages, size_t maxsize, unsigned maxpages, |
574 | size_t *start) | 593 | size_t *start) |