orangefs: make pvfs2_inode_read() take iov_iter

... and make the only caller use page-backed iov_iter,
getting rid of kmap/kunmap *and* of the bug with
attempted use of iovec-backed copy_page_to_iter()
on a kernel pointer.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
This commit is contained in:
Al Viro
2015-10-08 18:31:05 -04:00
committed by Mike Marshall
parent 0071ed1ec6
commit 74f68fce2a
3 changed files with 11 additions and 21 deletions

View File

@@ -369,22 +369,17 @@ out:
* Data may be placed either in a user or kernel buffer.
*/
ssize_t pvfs2_inode_read(struct inode *inode,
char __user *buf,
size_t count,
struct iov_iter *iter,
loff_t *offset,
loff_t readahead_size)
{
struct pvfs2_inode_s *pvfs2_inode = PVFS2_I(inode);
size_t count = iov_iter_count(iter);
size_t bufmap_size;
struct iovec vec;
struct iov_iter iter;
ssize_t ret = -EINVAL;
g_pvfs2_stats.reads++;
vec.iov_base = buf;
vec.iov_len = count;
bufmap_size = pvfs_bufmap_size_query();
if (count > bufmap_size) {
gossip_debug(GOSSIP_FILE_DEBUG,
@@ -400,8 +395,7 @@ ssize_t pvfs2_inode_read(struct inode *inode,
count,
llu(*offset));
iov_iter_init(&iter, READ, &vec, 1, count);
ret = wait_for_direct_io(PVFS_IO_READ, inode, offset, &iter,
ret = wait_for_direct_io(PVFS_IO_READ, inode, offset, iter,
count, readahead_size);
if (ret > 0)
*offset += ret;