aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-04-04 01:14:53 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2015-04-11 22:29:43 -0400
commit8436318205b9f29e45db88850ec60e326327e241 (patch)
tree4339c116819e9e6d8e61a1876d9d0d08d0ee089c
parent1c65d98672e09a0cb28e1e9ae49e9d96355f522f (diff)
->aio_read and ->aio_write removed
no remaining users Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--Documentation/filesystems/Locking2
-rw-r--r--Documentation/filesystems/porting3
-rw-r--r--Documentation/filesystems/vfs.txt6
-rw-r--r--fs/aio.c13
-rw-r--r--fs/file_table.c4
-rw-r--r--fs/open.c4
-rw-r--r--fs/read_write.c29
-rw-r--r--include/linux/fs.h2
8 files changed, 9 insertions, 54 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
index f91926f2f482..c3cd6279e92e 100644
--- a/Documentation/filesystems/Locking
+++ b/Documentation/filesystems/Locking
@@ -429,8 +429,6 @@ prototypes:
429 loff_t (*llseek) (struct file *, loff_t, int); 429 loff_t (*llseek) (struct file *, loff_t, int);
430 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 430 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
431 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 431 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
432 ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
433 ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
434 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); 432 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
435 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); 433 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
436 int (*iterate) (struct file *, struct dir_context *); 434 int (*iterate) (struct file *, struct dir_context *);
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting
index 4006483c275f..e69274de8d0c 100644
--- a/Documentation/filesystems/porting
+++ b/Documentation/filesystems/porting
@@ -480,3 +480,6 @@ in your dentry operations instead.
480[mandatory] 480[mandatory]
481 do _not_ use new_sync_{read,write} for ->read/->write; leave it NULL 481 do _not_ use new_sync_{read,write} for ->read/->write; leave it NULL
482 instead. 482 instead.
483--
484[mandatory]
485 ->aio_read/->aio_write are gone. Use ->read_iter/->write_iter.
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt
index 966b22829f3b..207cdca68bed 100644
--- a/Documentation/filesystems/vfs.txt
+++ b/Documentation/filesystems/vfs.txt
@@ -804,8 +804,6 @@ struct file_operations {
804 loff_t (*llseek) (struct file *, loff_t, int); 804 loff_t (*llseek) (struct file *, loff_t, int);
805 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 805 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
806 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 806 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
807 ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
808 ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
809 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); 807 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
810 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); 808 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
811 int (*iterate) (struct file *, struct dir_context *); 809 int (*iterate) (struct file *, struct dir_context *);
@@ -838,14 +836,10 @@ otherwise noted.
838 836
839 read: called by read(2) and related system calls 837 read: called by read(2) and related system calls
840 838
841 aio_read: vectored, possibly asynchronous read
842
843 read_iter: possibly asynchronous read with iov_iter as destination 839 read_iter: possibly asynchronous read with iov_iter as destination
844 840
845 write: called by write(2) and related system calls 841 write: called by write(2) and related system calls
846 842
847 aio_write: vectored, possibly asynchronous write
848
849 write_iter: possibly asynchronous write with iov_iter as source 843 write_iter: possibly asynchronous write with iov_iter as source
850 844
851 iterate: called when the VFS needs to read the directory contents 845 iterate: called when the VFS needs to read the directory contents
diff --git a/fs/aio.c b/fs/aio.c
index f0b0a2f8a63f..8eece807abed 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1347,8 +1347,6 @@ SYSCALL_DEFINE1(io_destroy, aio_context_t, ctx)
1347 return -EINVAL; 1347 return -EINVAL;
1348} 1348}
1349 1349
1350typedef ssize_t (aio_rw_op)(struct kiocb *, const struct iovec *,
1351 unsigned long, loff_t);
1352typedef ssize_t (rw_iter_op)(struct kiocb *, struct iov_iter *); 1350typedef ssize_t (rw_iter_op)(struct kiocb *, struct iov_iter *);
1353 1351
1354static int aio_setup_vectored_rw(int rw, char __user *buf, size_t len, 1352static int aio_setup_vectored_rw(int rw, char __user *buf, size_t len,
@@ -1377,7 +1375,6 @@ static ssize_t aio_run_iocb(struct kiocb *req, unsigned opcode,
1377 ssize_t ret; 1375 ssize_t ret;
1378 int rw; 1376 int rw;
1379 fmode_t mode; 1377 fmode_t mode;
1380 aio_rw_op *rw_op;
1381 rw_iter_op *iter_op; 1378 rw_iter_op *iter_op;
1382 struct iovec inline_vecs[UIO_FASTIOV], *iovec = inline_vecs; 1379 struct iovec inline_vecs[UIO_FASTIOV], *iovec = inline_vecs;
1383 struct iov_iter iter; 1380 struct iov_iter iter;
@@ -1387,7 +1384,6 @@ static ssize_t aio_run_iocb(struct kiocb *req, unsigned opcode,
1387 case IOCB_CMD_PREADV: 1384 case IOCB_CMD_PREADV:
1388 mode = FMODE_READ; 1385 mode = FMODE_READ;
1389 rw = READ; 1386 rw = READ;
1390 rw_op = file->f_op->aio_read;
1391 iter_op = file->f_op->read_iter; 1387 iter_op = file->f_op->read_iter;
1392 goto rw_common; 1388 goto rw_common;
1393 1389
@@ -1395,14 +1391,13 @@ static ssize_t aio_run_iocb(struct kiocb *req, unsigned opcode,
1395 case IOCB_CMD_PWRITEV: 1391 case IOCB_CMD_PWRITEV:
1396 mode = FMODE_WRITE; 1392 mode = FMODE_WRITE;
1397 rw = WRITE; 1393 rw = WRITE;
1398 rw_op = file->f_op->aio_write;
1399 iter_op = file->f_op->write_iter; 1394 iter_op = file->f_op->write_iter;
1400 goto rw_common; 1395 goto rw_common;
1401rw_common: 1396rw_common:
1402 if (unlikely(!(file->f_mode & mode))) 1397 if (unlikely(!(file->f_mode & mode)))
1403 return -EBADF; 1398 return -EBADF;
1404 1399
1405 if (!rw_op && !iter_op) 1400 if (!iter_op)
1406 return -EINVAL; 1401 return -EINVAL;
1407 1402
1408 if (opcode == IOCB_CMD_PREADV || opcode == IOCB_CMD_PWRITEV) 1403 if (opcode == IOCB_CMD_PREADV || opcode == IOCB_CMD_PWRITEV)
@@ -1425,11 +1420,7 @@ rw_common:
1425 if (rw == WRITE) 1420 if (rw == WRITE)
1426 file_start_write(file); 1421 file_start_write(file);
1427 1422
1428 if (iter_op) { 1423 ret = iter_op(req, &iter);
1429 ret = iter_op(req, &iter);
1430 } else {
1431 ret = rw_op(req, iter.iov, iter.nr_segs, req->ki_pos);
1432 }
1433 1424
1434 if (rw == WRITE) 1425 if (rw == WRITE)
1435 file_end_write(file); 1426 file_end_write(file);
diff --git a/fs/file_table.c b/fs/file_table.c
index 3f85411b03ce..294174dcc226 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -168,10 +168,10 @@ struct file *alloc_file(struct path *path, fmode_t mode,
168 file->f_inode = path->dentry->d_inode; 168 file->f_inode = path->dentry->d_inode;
169 file->f_mapping = path->dentry->d_inode->i_mapping; 169 file->f_mapping = path->dentry->d_inode->i_mapping;
170 if ((mode & FMODE_READ) && 170 if ((mode & FMODE_READ) &&
171 likely(fop->read || fop->aio_read || fop->read_iter)) 171 likely(fop->read || fop->read_iter))
172 mode |= FMODE_CAN_READ; 172 mode |= FMODE_CAN_READ;
173 if ((mode & FMODE_WRITE) && 173 if ((mode & FMODE_WRITE) &&
174 likely(fop->write || fop->aio_write || fop->write_iter)) 174 likely(fop->write || fop->write_iter))
175 mode |= FMODE_CAN_WRITE; 175 mode |= FMODE_CAN_WRITE;
176 file->f_mode = mode; 176 file->f_mode = mode;
177 file->f_op = fop; 177 file->f_op = fop;
diff --git a/fs/open.c b/fs/open.c
index 6a83c47d5904..6796f04d6032 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -734,10 +734,10 @@ static int do_dentry_open(struct file *f,
734 if ((f->f_mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ) 734 if ((f->f_mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ)
735 i_readcount_inc(inode); 735 i_readcount_inc(inode);
736 if ((f->f_mode & FMODE_READ) && 736 if ((f->f_mode & FMODE_READ) &&
737 likely(f->f_op->read || f->f_op->aio_read || f->f_op->read_iter)) 737 likely(f->f_op->read || f->f_op->read_iter))
738 f->f_mode |= FMODE_CAN_READ; 738 f->f_mode |= FMODE_CAN_READ;
739 if ((f->f_mode & FMODE_WRITE) && 739 if ((f->f_mode & FMODE_WRITE) &&
740 likely(f->f_op->write || f->f_op->aio_write || f->f_op->write_iter)) 740 likely(f->f_op->write || f->f_op->write_iter))
741 f->f_mode |= FMODE_CAN_WRITE; 741 f->f_mode |= FMODE_CAN_WRITE;
742 742
743 f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC); 743 f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC);
diff --git a/fs/read_write.c b/fs/read_write.c
index 3d42d8ee5940..45d583c33879 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -22,8 +22,6 @@
22#include <asm/unistd.h> 22#include <asm/unistd.h>
23 23
24typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *); 24typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *);
25typedef ssize_t (*iov_fn_t)(struct kiocb *, const struct iovec *,
26 unsigned long, loff_t);
27typedef ssize_t (*iter_fn_t)(struct kiocb *, struct iov_iter *); 25typedef ssize_t (*iter_fn_t)(struct kiocb *, struct iov_iter *);
28 26
29const struct file_operations generic_ro_fops = { 27const struct file_operations generic_ro_fops = {
@@ -668,21 +666,6 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter,
668 return ret; 666 return ret;
669} 667}
670 668
671static ssize_t do_sync_readv_writev(struct file *filp, struct iov_iter *iter,
672 loff_t *ppos, iov_fn_t fn)
673{
674 struct kiocb kiocb;
675 ssize_t ret;
676
677 init_sync_kiocb(&kiocb, filp);
678 kiocb.ki_pos = *ppos;
679
680 ret = fn(&kiocb, iter->iov, iter->nr_segs, kiocb.ki_pos);
681 BUG_ON(ret == -EIOCBQUEUED);
682 *ppos = kiocb.ki_pos;
683 return ret;
684}
685
686/* Do it by hand, with file-ops */ 669/* Do it by hand, with file-ops */
687static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter, 670static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter,
688 loff_t *ppos, io_fn_t fn) 671 loff_t *ppos, io_fn_t fn)
@@ -797,7 +780,6 @@ static ssize_t do_readv_writev(int type, struct file *file,
797 struct iov_iter iter; 780 struct iov_iter iter;
798 ssize_t ret; 781 ssize_t ret;
799 io_fn_t fn; 782 io_fn_t fn;
800 iov_fn_t fnv;
801 iter_fn_t iter_fn; 783 iter_fn_t iter_fn;
802 784
803 ret = import_iovec(type, uvector, nr_segs, 785 ret = import_iovec(type, uvector, nr_segs,
@@ -812,22 +794,17 @@ static ssize_t do_readv_writev(int type, struct file *file,
812 if (ret < 0) 794 if (ret < 0)
813 goto out; 795 goto out;
814 796
815 fnv = NULL;
816 if (type == READ) { 797 if (type == READ) {
817 fn = file->f_op->read; 798 fn = file->f_op->read;
818 fnv = file->f_op->aio_read;
819 iter_fn = file->f_op->read_iter; 799 iter_fn = file->f_op->read_iter;
820 } else { 800 } else {
821 fn = (io_fn_t)file->f_op->write; 801 fn = (io_fn_t)file->f_op->write;
822 fnv = file->f_op->aio_write;
823 iter_fn = file->f_op->write_iter; 802 iter_fn = file->f_op->write_iter;
824 file_start_write(file); 803 file_start_write(file);
825 } 804 }
826 805
827 if (iter_fn) 806 if (iter_fn)
828 ret = do_iter_readv_writev(file, &iter, pos, iter_fn); 807 ret = do_iter_readv_writev(file, &iter, pos, iter_fn);
829 else if (fnv)
830 ret = do_sync_readv_writev(file, &iter, pos, fnv);
831 else 808 else
832 ret = do_loop_readv_writev(file, &iter, pos, fn); 809 ret = do_loop_readv_writev(file, &iter, pos, fn);
833 810
@@ -977,7 +954,6 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
977 struct iov_iter iter; 954 struct iov_iter iter;
978 ssize_t ret; 955 ssize_t ret;
979 io_fn_t fn; 956 io_fn_t fn;
980 iov_fn_t fnv;
981 iter_fn_t iter_fn; 957 iter_fn_t iter_fn;
982 958
983 ret = compat_import_iovec(type, uvector, nr_segs, 959 ret = compat_import_iovec(type, uvector, nr_segs,
@@ -992,22 +968,17 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
992 if (ret < 0) 968 if (ret < 0)
993 goto out; 969 goto out;
994 970
995 fnv = NULL;
996 if (type == READ) { 971 if (type == READ) {
997 fn = file->f_op->read; 972 fn = file->f_op->read;
998 fnv = file->f_op->aio_read;
999 iter_fn = file->f_op->read_iter; 973 iter_fn = file->f_op->read_iter;
1000 } else { 974 } else {
1001 fn = (io_fn_t)file->f_op->write; 975 fn = (io_fn_t)file->f_op->write;
1002 fnv = file->f_op->aio_write;
1003 iter_fn = file->f_op->write_iter; 976 iter_fn = file->f_op->write_iter;
1004 file_start_write(file); 977 file_start_write(file);
1005 } 978 }
1006 979
1007 if (iter_fn) 980 if (iter_fn)
1008 ret = do_iter_readv_writev(file, &iter, pos, iter_fn); 981 ret = do_iter_readv_writev(file, &iter, pos, iter_fn);
1009 else if (fnv)
1010 ret = do_sync_readv_writev(file, &iter, pos, fnv);
1011 else 982 else
1012 ret = do_loop_readv_writev(file, &iter, pos, fn); 983 ret = do_loop_readv_writev(file, &iter, pos, fn);
1013 984
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 83e122c1a902..f1e3f65255a8 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1562,8 +1562,6 @@ struct file_operations {
1562 loff_t (*llseek) (struct file *, loff_t, int); 1562 loff_t (*llseek) (struct file *, loff_t, int);
1563 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 1563 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
1564 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 1564 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
1565 ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1566 ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
1567 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); 1565 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
1568 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); 1566 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
1569 int (*iterate) (struct file *, struct dir_context *); 1567 int (*iterate) (struct file *, struct dir_context *);