->aio_read and ->aio_write removed
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 4 Apr 2015 05:14:53 +0000 (01:14 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 12 Apr 2015 02:29:43 +0000 (22:29 -0400)
no remaining users

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Documentation/filesystems/Locking
Documentation/filesystems/porting
Documentation/filesystems/vfs.txt
fs/aio.c
fs/file_table.c
fs/open.c
fs/read_write.c
include/linux/fs.h

index f91926f2f4824dee2c6785dcaf4cedd84df838e9..c3cd6279e92e7a934ce799a8ca942c42872b4815 100644 (file)
@@ -429,8 +429,6 @@ prototypes:
        loff_t (*llseek) (struct file *, loff_t, int);
        ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
        ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
-       ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
-       ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
        ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
        ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
        int (*iterate) (struct file *, struct dir_context *);
index 4006483c275fd3b33c6ed9322ea7c22b728de3f6..e69274de8d0c9c1754cc40b8d99d78a724e63e50 100644 (file)
@@ -480,3 +480,6 @@ in your dentry operations instead.
 [mandatory]
        do _not_ use new_sync_{read,write} for ->read/->write; leave it NULL
        instead.
+--
+[mandatory]
+       ->aio_read/->aio_write are gone.  Use ->read_iter/->write_iter.
index 966b22829f3b605b92f19ce43665225ab17a8a7e..207cdca68bedf118554bd0addf5517546c190e17 100644 (file)
@@ -804,8 +804,6 @@ struct file_operations {
        loff_t (*llseek) (struct file *, loff_t, int);
        ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
        ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
-       ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
-       ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
        ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
        ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
        int (*iterate) (struct file *, struct dir_context *);
@@ -838,14 +836,10 @@ otherwise noted.
 
   read: called by read(2) and related system calls
 
-  aio_read: vectored, possibly asynchronous read
-
   read_iter: possibly asynchronous read with iov_iter as destination
 
   write: called by write(2) and related system calls
 
-  aio_write: vectored, possibly asynchronous write
-
   write_iter: possibly asynchronous write with iov_iter as source
 
   iterate: called when the VFS needs to read the directory contents
index f0b0a2f8a63f2bfc2b57667fa1772ca9d00e2009..8eece807abedaabc5c463ee2d3baa2709c11c609 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1347,8 +1347,6 @@ SYSCALL_DEFINE1(io_destroy, aio_context_t, ctx)
        return -EINVAL;
 }
 
-typedef ssize_t (aio_rw_op)(struct kiocb *, const struct iovec *,
-                           unsigned long, loff_t);
 typedef ssize_t (rw_iter_op)(struct kiocb *, struct iov_iter *);
 
 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,
        ssize_t ret;
        int rw;
        fmode_t mode;
-       aio_rw_op *rw_op;
        rw_iter_op *iter_op;
        struct iovec inline_vecs[UIO_FASTIOV], *iovec = inline_vecs;
        struct iov_iter iter;
@@ -1387,7 +1384,6 @@ static ssize_t aio_run_iocb(struct kiocb *req, unsigned opcode,
        case IOCB_CMD_PREADV:
                mode    = FMODE_READ;
                rw      = READ;
-               rw_op   = file->f_op->aio_read;
                iter_op = file->f_op->read_iter;
                goto rw_common;
 
@@ -1395,14 +1391,13 @@ static ssize_t aio_run_iocb(struct kiocb *req, unsigned opcode,
        case IOCB_CMD_PWRITEV:
                mode    = FMODE_WRITE;
                rw      = WRITE;
-               rw_op   = file->f_op->aio_write;
                iter_op = file->f_op->write_iter;
                goto rw_common;
 rw_common:
                if (unlikely(!(file->f_mode & mode)))
                        return -EBADF;
 
-               if (!rw_op && !iter_op)
+               if (!iter_op)
                        return -EINVAL;
 
                if (opcode == IOCB_CMD_PREADV || opcode == IOCB_CMD_PWRITEV)
@@ -1425,11 +1420,7 @@ rw_common:
                if (rw == WRITE)
                        file_start_write(file);
 
-               if (iter_op) {
-                       ret = iter_op(req, &iter);
-               } else {
-                       ret = rw_op(req, iter.iov, iter.nr_segs, req->ki_pos);
-               }
+               ret = iter_op(req, &iter);
 
                if (rw == WRITE)
                        file_end_write(file);
index 3f85411b03ce6aac983caa0e0283e8da8848225d..294174dcc2261237fa900432c5c3a7134fda3976 100644 (file)
@@ -168,10 +168,10 @@ struct file *alloc_file(struct path *path, fmode_t mode,
        file->f_inode = path->dentry->d_inode;
        file->f_mapping = path->dentry->d_inode->i_mapping;
        if ((mode & FMODE_READ) &&
-            likely(fop->read || fop->aio_read || fop->read_iter))
+            likely(fop->read || fop->read_iter))
                mode |= FMODE_CAN_READ;
        if ((mode & FMODE_WRITE) &&
-            likely(fop->write || fop->aio_write || fop->write_iter))
+            likely(fop->write || fop->write_iter))
                mode |= FMODE_CAN_WRITE;
        file->f_mode = mode;
        file->f_op = fop;
index 6a83c47d59040df871d2dac261d71fd32bec5587..6796f04d6032ab7e3009d3666bde640fdec37934 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -734,10 +734,10 @@ static int do_dentry_open(struct file *f,
        if ((f->f_mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ)
                i_readcount_inc(inode);
        if ((f->f_mode & FMODE_READ) &&
-            likely(f->f_op->read || f->f_op->aio_read || f->f_op->read_iter))
+            likely(f->f_op->read || f->f_op->read_iter))
                f->f_mode |= FMODE_CAN_READ;
        if ((f->f_mode & FMODE_WRITE) &&
-            likely(f->f_op->write || f->f_op->aio_write || f->f_op->write_iter))
+            likely(f->f_op->write || f->f_op->write_iter))
                f->f_mode |= FMODE_CAN_WRITE;
 
        f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC);
index 3d42d8ee5940385bb64328d7df4afd3967813db2..45d583c33879e18d89b3fc06d48bbd05a30b6ab3 100644 (file)
@@ -22,8 +22,6 @@
 #include <asm/unistd.h>
 
 typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *);
-typedef ssize_t (*iov_fn_t)(struct kiocb *, const struct iovec *,
-               unsigned long, loff_t);
 typedef ssize_t (*iter_fn_t)(struct kiocb *, struct iov_iter *);
 
 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,
        return ret;
 }
 
-static ssize_t do_sync_readv_writev(struct file *filp, struct iov_iter *iter,
-               loff_t *ppos, iov_fn_t fn)
-{
-       struct kiocb kiocb;
-       ssize_t ret;
-
-       init_sync_kiocb(&kiocb, filp);
-       kiocb.ki_pos = *ppos;
-
-       ret = fn(&kiocb, iter->iov, iter->nr_segs, kiocb.ki_pos);
-       BUG_ON(ret == -EIOCBQUEUED);
-       *ppos = kiocb.ki_pos;
-       return ret;
-}
-
 /* Do it by hand, with file-ops */
 static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter,
                loff_t *ppos, io_fn_t fn)
@@ -797,7 +780,6 @@ static ssize_t do_readv_writev(int type, struct file *file,
        struct iov_iter iter;
        ssize_t ret;
        io_fn_t fn;
-       iov_fn_t fnv;
        iter_fn_t iter_fn;
 
        ret = import_iovec(type, uvector, nr_segs,
@@ -812,22 +794,17 @@ static ssize_t do_readv_writev(int type, struct file *file,
        if (ret < 0)
                goto out;
 
-       fnv = NULL;
        if (type == READ) {
                fn = file->f_op->read;
-               fnv = file->f_op->aio_read;
                iter_fn = file->f_op->read_iter;
        } else {
                fn = (io_fn_t)file->f_op->write;
-               fnv = file->f_op->aio_write;
                iter_fn = file->f_op->write_iter;
                file_start_write(file);
        }
 
        if (iter_fn)
                ret = do_iter_readv_writev(file, &iter, pos, iter_fn);
-       else if (fnv)
-               ret = do_sync_readv_writev(file, &iter, pos, fnv);
        else
                ret = do_loop_readv_writev(file, &iter, pos, fn);
 
@@ -977,7 +954,6 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
        struct iov_iter iter;
        ssize_t ret;
        io_fn_t fn;
-       iov_fn_t fnv;
        iter_fn_t iter_fn;
 
        ret = compat_import_iovec(type, uvector, nr_segs,
@@ -992,22 +968,17 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
        if (ret < 0)
                goto out;
 
-       fnv = NULL;
        if (type == READ) {
                fn = file->f_op->read;
-               fnv = file->f_op->aio_read;
                iter_fn = file->f_op->read_iter;
        } else {
                fn = (io_fn_t)file->f_op->write;
-               fnv = file->f_op->aio_write;
                iter_fn = file->f_op->write_iter;
                file_start_write(file);
        }
 
        if (iter_fn)
                ret = do_iter_readv_writev(file, &iter, pos, iter_fn);
-       else if (fnv)
-               ret = do_sync_readv_writev(file, &iter, pos, fnv);
        else
                ret = do_loop_readv_writev(file, &iter, pos, fn);
 
index 83e122c1a90250d314b635855334f86373b635ff..f1e3f65255a81092cfa084342f1440779793fc12 100644 (file)
@@ -1562,8 +1562,6 @@ struct file_operations {
        loff_t (*llseek) (struct file *, loff_t, int);
        ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
        ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
-       ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
-       ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
        ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
        ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
        int (*iterate) (struct file *, struct dir_context *);