diff options
author | Miklos Szeredi <mszeredi@redhat.com> | 2017-02-20 10:51:23 -0500 |
---|---|---|
committer | Miklos Szeredi <mszeredi@redhat.com> | 2017-02-20 10:51:23 -0500 |
commit | bb7462b6fd64e40809a857223bf7f0e628969f87 (patch) | |
tree | aa3ac0570ca67c85f0c7a3658c970716135ac1c0 | |
parent | 0f78d06ac1e9b470cbd8f913ee1688c8b2c8feb3 (diff) |
vfs: use helpers for calling f_op->{read,write}_iter()
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
-rw-r--r-- | drivers/block/loop.c | 4 | ||||
-rw-r--r-- | fs/aio.c | 4 | ||||
-rw-r--r-- | fs/read_write.c | 12 | ||||
-rw-r--r-- | fs/splice.c | 2 | ||||
-rw-r--r-- | include/linux/fs.h | 12 |
5 files changed, 23 insertions, 11 deletions
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index f347285c67ec..2cf2903a0715 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
@@ -501,9 +501,9 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd, | |||
501 | cmd->iocb.ki_flags = IOCB_DIRECT; | 501 | cmd->iocb.ki_flags = IOCB_DIRECT; |
502 | 502 | ||
503 | if (rw == WRITE) | 503 | if (rw == WRITE) |
504 | ret = file->f_op->write_iter(&cmd->iocb, &iter); | 504 | ret = call_write_iter(file, &cmd->iocb, &iter); |
505 | else | 505 | else |
506 | ret = file->f_op->read_iter(&cmd->iocb, &iter); | 506 | ret = call_read_iter(file, &cmd->iocb, &iter); |
507 | 507 | ||
508 | if (ret != -EIOCBQUEUED) | 508 | if (ret != -EIOCBQUEUED) |
509 | cmd->iocb.ki_complete(&cmd->iocb, ret, 0); | 509 | cmd->iocb.ki_complete(&cmd->iocb, ret, 0); |
@@ -1494,7 +1494,7 @@ static ssize_t aio_read(struct kiocb *req, struct iocb *iocb, bool vectored, | |||
1494 | return ret; | 1494 | return ret; |
1495 | ret = rw_verify_area(READ, file, &req->ki_pos, iov_iter_count(&iter)); | 1495 | ret = rw_verify_area(READ, file, &req->ki_pos, iov_iter_count(&iter)); |
1496 | if (!ret) | 1496 | if (!ret) |
1497 | ret = aio_ret(req, file->f_op->read_iter(req, &iter)); | 1497 | ret = aio_ret(req, call_read_iter(file, req, &iter)); |
1498 | kfree(iovec); | 1498 | kfree(iovec); |
1499 | return ret; | 1499 | return ret; |
1500 | } | 1500 | } |
@@ -1519,7 +1519,7 @@ static ssize_t aio_write(struct kiocb *req, struct iocb *iocb, bool vectored, | |||
1519 | if (!ret) { | 1519 | if (!ret) { |
1520 | req->ki_flags |= IOCB_WRITE; | 1520 | req->ki_flags |= IOCB_WRITE; |
1521 | file_start_write(file); | 1521 | file_start_write(file); |
1522 | ret = aio_ret(req, file->f_op->write_iter(req, &iter)); | 1522 | ret = aio_ret(req, call_write_iter(file, req, &iter)); |
1523 | /* | 1523 | /* |
1524 | * We release freeze protection in aio_complete(). Fool lockdep | 1524 | * We release freeze protection in aio_complete(). Fool lockdep |
1525 | * by telling it the lock got released so that it doesn't | 1525 | * by telling it the lock got released so that it doesn't |
diff --git a/fs/read_write.c b/fs/read_write.c index 198614f757fa..f2ed9fdc98fd 100644 --- a/fs/read_write.c +++ b/fs/read_write.c | |||
@@ -367,7 +367,7 @@ ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos) | |||
367 | kiocb.ki_pos = *ppos; | 367 | kiocb.ki_pos = *ppos; |
368 | 368 | ||
369 | iter->type |= READ; | 369 | iter->type |= READ; |
370 | ret = file->f_op->read_iter(&kiocb, iter); | 370 | ret = call_read_iter(file, &kiocb, iter); |
371 | BUG_ON(ret == -EIOCBQUEUED); | 371 | BUG_ON(ret == -EIOCBQUEUED); |
372 | if (ret > 0) | 372 | if (ret > 0) |
373 | *ppos = kiocb.ki_pos; | 373 | *ppos = kiocb.ki_pos; |
@@ -387,7 +387,7 @@ ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos) | |||
387 | kiocb.ki_pos = *ppos; | 387 | kiocb.ki_pos = *ppos; |
388 | 388 | ||
389 | iter->type |= WRITE; | 389 | iter->type |= WRITE; |
390 | ret = file->f_op->write_iter(&kiocb, iter); | 390 | ret = call_write_iter(file, &kiocb, iter); |
391 | BUG_ON(ret == -EIOCBQUEUED); | 391 | BUG_ON(ret == -EIOCBQUEUED); |
392 | if (ret > 0) | 392 | if (ret > 0) |
393 | *ppos = kiocb.ki_pos; | 393 | *ppos = kiocb.ki_pos; |
@@ -436,7 +436,7 @@ static ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, lo | |||
436 | kiocb.ki_pos = *ppos; | 436 | kiocb.ki_pos = *ppos; |
437 | iov_iter_init(&iter, READ, &iov, 1, len); | 437 | iov_iter_init(&iter, READ, &iov, 1, len); |
438 | 438 | ||
439 | ret = filp->f_op->read_iter(&kiocb, &iter); | 439 | ret = call_read_iter(filp, &kiocb, &iter); |
440 | BUG_ON(ret == -EIOCBQUEUED); | 440 | BUG_ON(ret == -EIOCBQUEUED); |
441 | *ppos = kiocb.ki_pos; | 441 | *ppos = kiocb.ki_pos; |
442 | return ret; | 442 | return ret; |
@@ -493,7 +493,7 @@ static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t | |||
493 | kiocb.ki_pos = *ppos; | 493 | kiocb.ki_pos = *ppos; |
494 | iov_iter_init(&iter, WRITE, &iov, 1, len); | 494 | iov_iter_init(&iter, WRITE, &iov, 1, len); |
495 | 495 | ||
496 | ret = filp->f_op->write_iter(&kiocb, &iter); | 496 | ret = call_write_iter(filp, &kiocb, &iter); |
497 | BUG_ON(ret == -EIOCBQUEUED); | 497 | BUG_ON(ret == -EIOCBQUEUED); |
498 | if (ret > 0) | 498 | if (ret > 0) |
499 | *ppos = kiocb.ki_pos; | 499 | *ppos = kiocb.ki_pos; |
@@ -690,9 +690,9 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter, | |||
690 | kiocb.ki_pos = *ppos; | 690 | kiocb.ki_pos = *ppos; |
691 | 691 | ||
692 | if (type == READ) | 692 | if (type == READ) |
693 | ret = filp->f_op->read_iter(&kiocb, iter); | 693 | ret = call_read_iter(filp, &kiocb, iter); |
694 | else | 694 | else |
695 | ret = filp->f_op->write_iter(&kiocb, iter); | 695 | ret = call_write_iter(filp, &kiocb, iter); |
696 | BUG_ON(ret == -EIOCBQUEUED); | 696 | BUG_ON(ret == -EIOCBQUEUED); |
697 | *ppos = kiocb.ki_pos; | 697 | *ppos = kiocb.ki_pos; |
698 | return ret; | 698 | return ret; |
diff --git a/fs/splice.c b/fs/splice.c index 873d83104e79..6518f058bd7f 100644 --- a/fs/splice.c +++ b/fs/splice.c | |||
@@ -306,7 +306,7 @@ ssize_t generic_file_splice_read(struct file *in, loff_t *ppos, | |||
306 | idx = to.idx; | 306 | idx = to.idx; |
307 | init_sync_kiocb(&kiocb, in); | 307 | init_sync_kiocb(&kiocb, in); |
308 | kiocb.ki_pos = *ppos; | 308 | kiocb.ki_pos = *ppos; |
309 | ret = in->f_op->read_iter(&kiocb, &to); | 309 | ret = call_read_iter(in, &kiocb, &to); |
310 | if (ret > 0) { | 310 | if (ret > 0) { |
311 | *ppos = kiocb.ki_pos; | 311 | *ppos = kiocb.ki_pos; |
312 | file_accessed(in); | 312 | file_accessed(in); |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 78c81e6f5d76..a3145cdff8f2 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1715,6 +1715,18 @@ struct inode_operations { | |||
1715 | int (*set_acl)(struct inode *, struct posix_acl *, int); | 1715 | int (*set_acl)(struct inode *, struct posix_acl *, int); |
1716 | } ____cacheline_aligned; | 1716 | } ____cacheline_aligned; |
1717 | 1717 | ||
1718 | static inline ssize_t call_read_iter(struct file *file, struct kiocb *kio, | ||
1719 | struct iov_iter *iter) | ||
1720 | { | ||
1721 | return file->f_op->read_iter(kio, iter); | ||
1722 | } | ||
1723 | |||
1724 | static inline ssize_t call_write_iter(struct file *file, struct kiocb *kio, | ||
1725 | struct iov_iter *iter) | ||
1726 | { | ||
1727 | return file->f_op->write_iter(kio, iter); | ||
1728 | } | ||
1729 | |||
1718 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, | 1730 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, |
1719 | unsigned long nr_segs, unsigned long fast_segs, | 1731 | unsigned long nr_segs, unsigned long fast_segs, |
1720 | struct iovec *fast_pointer, | 1732 | struct iovec *fast_pointer, |