new iov_iter flavour - ITER_UBUF
Equivalent of single-segment iovec. Initialized by iov_iter_ubuf(), checked for by iter_is_ubuf(), otherwise behaves like ITER_IOVEC ones. We are going to expose the things like ->write_iter() et.al. to those in subsequent commits. New predicate (user_backed_iter()) that is true for ITER_IOVEC and ITER_UBUF; places like direct-IO handling should use that for checking that pages we modify after getting them from iov_iter_get_pages() would need to be dirtied. DO NOT assume that replacing iter_is_iovec() with user_backed_iter() will solve all problems - there's code that uses iter_is_iovec() to decide how to poke around in iov_iter guts and for that the predicate replacement obviously won't suffice. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
fa9db655d0
commit
fcb14cb1bd
12 changed files with 108 additions and 31 deletions
|
|
@ -2602,7 +2602,7 @@ static ssize_t shmem_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
|||
ret = copy_page_to_iter(page, offset, nr, to);
|
||||
put_page(page);
|
||||
|
||||
} else if (iter_is_iovec(to)) {
|
||||
} else if (user_backed_iter(to)) {
|
||||
/*
|
||||
* Copy to user tends to be so well optimized, but
|
||||
* clear_user() not so much, that it is noticeably
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue