diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-03-30 22:08:36 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-04-11 22:27:53 -0400 |
commit | 15316263649d9eed393d75095b156781a877eb06 (patch) | |
tree | fa0099e95ac7848a5a8ee55c16782e4a456de7ca /fs/fuse/file.c | |
parent | cfa86a74122942a18806f861eeb2a0b97676a598 (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.c | 29 |
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 | ||
1404 | static ssize_t fuse_direct_read(struct file *file, char __user *buf, | 1404 | static 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 | ||
1414 | static ssize_t __fuse_direct_write(struct fuse_io_priv *io, | 1410 | static 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 | ||
1435 | static ssize_t fuse_direct_write(struct file *file, const char __user *buf, | 1431 | static 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 | ||
2989 | static const struct file_operations fuse_direct_io_file_operations = { | 2982 | static 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, |