summaryrefslogtreecommitdiffstats
path: root/fs/fuse/file.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-03-30 22:08:36 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2015-04-11 22:27:53 -0400
commit15316263649d9eed393d75095b156781a877eb06 (patch)
treefa0099e95ac7848a5a8ee55c16782e4a456de7ca /fs/fuse/file.c
parentcfa86a74122942a18806f861eeb2a0b97676a598 (diff)
fuse: switch fuse_direct_io_file_operations to ->{read,write}_iter()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/fuse/file.c')
-rw-r--r--fs/fuse/file.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index ff102cbf16ea..aea87d277dcd 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -1401,14 +1401,10 @@ static ssize_t __fuse_direct_read(struct fuse_io_priv *io,
1401 return res; 1401 return res;
1402} 1402}
1403 1403
1404static ssize_t fuse_direct_read(struct file *file, char __user *buf, 1404static ssize_t fuse_direct_read_iter(struct kiocb *iocb, struct iov_iter *to)
1405 size_t count, loff_t *ppos)
1406{ 1405{
1407 struct fuse_io_priv io = { .async = 0, .file = file }; 1406 struct fuse_io_priv io = { .async = 0, .file = iocb->ki_filp };
1408 struct iovec iov = { .iov_base = buf, .iov_len = count }; 1407 return __fuse_direct_read(&io, to, &iocb->ki_pos);
1409 struct iov_iter ii;
1410 iov_iter_init(&ii, READ, &iov, 1, count);
1411 return __fuse_direct_read(&io, &ii, ppos);
1412} 1408}
1413 1409
1414static ssize_t __fuse_direct_write(struct fuse_io_priv *io, 1410static ssize_t __fuse_direct_write(struct fuse_io_priv *io,
@@ -1432,24 +1428,21 @@ static ssize_t __fuse_direct_write(struct fuse_io_priv *io,
1432 return res; 1428 return res;
1433} 1429}
1434 1430
1435static ssize_t fuse_direct_write(struct file *file, const char __user *buf, 1431static ssize_t fuse_direct_write_iter(struct kiocb *iocb, struct iov_iter *from)
1436 size_t count, loff_t *ppos)
1437{ 1432{
1438 struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = count }; 1433 struct file *file = iocb->ki_filp;
1439 struct inode *inode = file_inode(file); 1434 struct inode *inode = file_inode(file);
1440 ssize_t res;
1441 struct fuse_io_priv io = { .async = 0, .file = file }; 1435 struct fuse_io_priv io = { .async = 0, .file = file };
1442 struct iov_iter ii; 1436 ssize_t res;
1443 iov_iter_init(&ii, WRITE, &iov, 1, count);
1444 1437
1445 if (is_bad_inode(inode)) 1438 if (is_bad_inode(inode))
1446 return -EIO; 1439 return -EIO;
1447 1440
1448 /* Don't allow parallel writes to the same file */ 1441 /* Don't allow parallel writes to the same file */
1449 mutex_lock(&inode->i_mutex); 1442 mutex_lock(&inode->i_mutex);
1450 res = __fuse_direct_write(&io, &ii, ppos); 1443 res = __fuse_direct_write(&io, from, &iocb->ki_pos);
1451 if (res > 0) 1444 if (res > 0)
1452 fuse_write_update_size(inode, *ppos); 1445 fuse_write_update_size(inode, iocb->ki_pos);
1453 mutex_unlock(&inode->i_mutex); 1446 mutex_unlock(&inode->i_mutex);
1454 1447
1455 return res; 1448 return res;
@@ -2988,8 +2981,10 @@ static const struct file_operations fuse_file_operations = {
2988 2981
2989static const struct file_operations fuse_direct_io_file_operations = { 2982static const struct file_operations fuse_direct_io_file_operations = {
2990 .llseek = fuse_file_llseek, 2983 .llseek = fuse_file_llseek,
2991 .read = fuse_direct_read, 2984 .read = new_sync_read,
2992 .write = fuse_direct_write, 2985 .read_iter = fuse_direct_read_iter,
2986 .write = new_sync_write,
2987 .write_iter = fuse_direct_write_iter,
2993 .mmap = fuse_direct_mmap, 2988 .mmap = fuse_direct_mmap,
2994 .open = fuse_open, 2989 .open = fuse_open,
2995 .flush = fuse_flush, 2990 .flush = fuse_flush,