diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-04-04 01:14:53 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-04-11 22:29:43 -0400 |
commit | 8436318205b9f29e45db88850ec60e326327e241 (patch) | |
tree | 4339c116819e9e6d8e61a1876d9d0d08d0ee089c | |
parent | 1c65d98672e09a0cb28e1e9ae49e9d96355f522f (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/Locking | 2 | ||||
-rw-r--r-- | Documentation/filesystems/porting | 3 | ||||
-rw-r--r-- | Documentation/filesystems/vfs.txt | 6 | ||||
-rw-r--r-- | fs/aio.c | 13 | ||||
-rw-r--r-- | fs/file_table.c | 4 | ||||
-rw-r--r-- | fs/open.c | 4 | ||||
-rw-r--r-- | fs/read_write.c | 29 | ||||
-rw-r--r-- | include/linux/fs.h | 2 |
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 |
@@ -1347,8 +1347,6 @@ SYSCALL_DEFINE1(io_destroy, aio_context_t, ctx) | |||
1347 | return -EINVAL; | 1347 | return -EINVAL; |
1348 | } | 1348 | } |
1349 | 1349 | ||
1350 | typedef ssize_t (aio_rw_op)(struct kiocb *, const struct iovec *, | ||
1351 | unsigned long, loff_t); | ||
1352 | typedef ssize_t (rw_iter_op)(struct kiocb *, struct iov_iter *); | 1350 | typedef ssize_t (rw_iter_op)(struct kiocb *, struct iov_iter *); |
1353 | 1351 | ||
1354 | static int aio_setup_vectored_rw(int rw, char __user *buf, size_t len, | 1352 | static 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; |
1401 | rw_common: | 1396 | rw_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; |
@@ -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 | ||
24 | typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *); | 24 | typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *); |
25 | typedef ssize_t (*iov_fn_t)(struct kiocb *, const struct iovec *, | ||
26 | unsigned long, loff_t); | ||
27 | typedef ssize_t (*iter_fn_t)(struct kiocb *, struct iov_iter *); | 25 | typedef ssize_t (*iter_fn_t)(struct kiocb *, struct iov_iter *); |
28 | 26 | ||
29 | const struct file_operations generic_ro_fops = { | 27 | const 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 | ||
671 | static 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 */ |
687 | static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter, | 670 | static 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 *); |