[readdir] ->readdir() is gone
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 23 May 2013 01:44:23 +0000 (21:44 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 29 Jun 2013 08:57:04 +0000 (12:57 +0400)
everything's converted to ->iterate()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Documentation/filesystems/Locking
Documentation/filesystems/porting
Documentation/filesystems/vfs.txt
fs/bad_inode.c
fs/exportfs/expfs.c
fs/readdir.c
include/linux/fs.h

index 0706d32a61e6fc0fafbbe9a975d095d5e37e95f7..bdd82b2339d9930728ecfe4e63d1d8a62a81d57d 100644 (file)
@@ -414,7 +414,7 @@ prototypes:
        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);
-       int (*readdir) (struct file *, void *, filldir_t);
+       int (*iterate) (struct file *, struct dir_context *);
        unsigned int (*poll) (struct file *, struct poll_table_struct *);
        long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
        long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
index 85a4a033bae7815e422545273f6826c6e0e36cd8..206a1bdc7321cf59a1ccc8829d09a9dccd9bcded 100644 (file)
@@ -448,3 +448,6 @@ in your dentry operations instead.
 --
 [mandatory]
        vfs_readdir() is gone; switch to iterate_dir() instead
+--
+[mandatory]
+       ->readdir() is gone now; switch to ->iterate()
index bc4b06b3160a3a6842d6ac104eb1d9ec7de067ac..4a35f6614a662e6ecaa9f5e90733304e7ceec93f 100644 (file)
@@ -777,7 +777,7 @@ struct file_operations {
        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);
-       int (*readdir) (struct file *, void *, filldir_t);
+       int (*iterate) (struct file *, struct dir_context *);
        unsigned int (*poll) (struct file *, struct poll_table_struct *);
        long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
        long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
@@ -815,7 +815,7 @@ otherwise noted.
 
   aio_write: called by io_submit(2) and other asynchronous I/O operations
 
-  readdir: called when the VFS needs to read the directory contents
+  iterate: called when the VFS needs to read the directory contents
 
   poll: called by the VFS when a process wants to check if there is
        activity on this file and (optionally) go to sleep until there
index 922ad460bff9857e39b6719001508e02e9b2b434..7c93953030fbe5eda13d76b6a8c53d6f2a31902d 100644 (file)
@@ -45,7 +45,7 @@ static ssize_t bad_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
        return -EIO;
 }
 
-static int bad_file_readdir(struct file *filp, void *dirent, filldir_t filldir)
+static int bad_file_readdir(struct file *file, struct dir_context *ctx)
 {
        return -EIO;
 }
@@ -152,7 +152,7 @@ static const struct file_operations bad_file_ops =
        .write          = bad_file_write,
        .aio_read       = bad_file_aio_read,
        .aio_write      = bad_file_aio_write,
-       .readdir        = bad_file_readdir,
+       .iterate        = bad_file_readdir,
        .poll           = bad_file_poll,
        .unlocked_ioctl = bad_file_unlocked_ioctl,
        .compat_ioctl   = bad_file_compat_ioctl,
index 6c8ef1dd4bdf8fc37285884813947f7fe371d419..78072e65f926c66406d751219a78243bc65eea85 100644 (file)
@@ -272,7 +272,7 @@ static int get_name(const struct path *path, char *name, struct dentry *child)
                goto out;
 
        error = -EINVAL;
-       if (!file->f_op->readdir && !file->f_op->iterate)
+       if (!file->f_op->iterate)
                goto out_close;
 
        buffer.name = name;
index 5d6578affbbf91b6d2e80b32398e8f0a53bc08ae..a6245c9fd0e693e95b97191f2967a82018fa2fe3 100644 (file)
@@ -24,7 +24,7 @@ int iterate_dir(struct file *file, struct dir_context *ctx)
 {
        struct inode *inode = file_inode(file);
        int res = -ENOTDIR;
-       if (!file->f_op || (!file->f_op->readdir && !file->f_op->iterate))
+       if (!file->f_op || !file->f_op->iterate)
                goto out;
 
        res = security_file_permission(file, MAY_READ);
@@ -37,14 +37,9 @@ int iterate_dir(struct file *file, struct dir_context *ctx)
 
        res = -ENOENT;
        if (!IS_DEADDIR(inode)) {
-               if (file->f_op->iterate) {
-                       ctx->pos = file->f_pos;
-                       res = file->f_op->iterate(file, ctx);
-                       file->f_pos = ctx->pos;
-               } else {
-                       res = file->f_op->readdir(file, ctx, ctx->actor);
-                       ctx->pos = file->f_pos;
-               }
+               ctx->pos = file->f_pos;
+               res = file->f_op->iterate(file, ctx);
+               file->f_pos = ctx->pos;
                file_accessed(file);
        }
        mutex_unlock(&inode->i_mutex);
index aa9770c7e8dff5e581adebfcc8a035cccc42b611..237af62976a698f2ad1f4ade4ec7153bdfd3e174 100644 (file)
@@ -1526,7 +1526,6 @@ struct file_operations {
        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);
-       int (*readdir) (struct file *, void *, filldir_t);
        int (*iterate) (struct file *, struct dir_context *);
        unsigned int (*poll) (struct file *, struct poll_table_struct *);
        long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);