aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/loop.c4
-rw-r--r--fs/aio.c4
-rw-r--r--fs/read_write.c12
-rw-r--r--fs/splice.c2
-rw-r--r--include/linux/fs.h12
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);
diff --git a/fs/aio.c b/fs/aio.c
index 4ab67e8cb776..9f4a9a2e7ae4 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -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
1718static 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
1724static 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
1718ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, 1730ssize_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,