[readdir] ->readdir() is gone
everything's converted to ->iterate() Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
2de5f059c4
commit
2233f31aad
7 changed files with 13 additions and 16 deletions
|
@ -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);
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
13
fs/readdir.c
13
fs/readdir.c
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue