Commit 3903b38c authored by Al Viro's avatar Al Viro

[readdir] convert romfs

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 5f6039ce
...@@ -145,19 +145,18 @@ static const struct address_space_operations romfs_aops = { ...@@ -145,19 +145,18 @@ static const struct address_space_operations romfs_aops = {
/* /*
* read the entries from a directory * read the entries from a directory
*/ */
static int romfs_readdir(struct file *filp, void *dirent, filldir_t filldir) static int romfs_readdir(struct file *file, struct dir_context *ctx)
{ {
struct inode *i = file_inode(filp); struct inode *i = file_inode(file);
struct romfs_inode ri; struct romfs_inode ri;
unsigned long offset, maxoff; unsigned long offset, maxoff;
int j, ino, nextfh; int j, ino, nextfh;
int stored = 0;
char fsname[ROMFS_MAXFN]; /* XXX dynamic? */ char fsname[ROMFS_MAXFN]; /* XXX dynamic? */
int ret; int ret;
maxoff = romfs_maxsize(i->i_sb); maxoff = romfs_maxsize(i->i_sb);
offset = filp->f_pos; offset = ctx->pos;
if (!offset) { if (!offset) {
offset = i->i_ino & ROMFH_MASK; offset = i->i_ino & ROMFH_MASK;
ret = romfs_dev_read(i->i_sb, offset, &ri, ROMFH_SIZE); ret = romfs_dev_read(i->i_sb, offset, &ri, ROMFH_SIZE);
...@@ -170,10 +169,10 @@ static int romfs_readdir(struct file *filp, void *dirent, filldir_t filldir) ...@@ -170,10 +169,10 @@ static int romfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
for (;;) { for (;;) {
if (!offset || offset >= maxoff) { if (!offset || offset >= maxoff) {
offset = maxoff; offset = maxoff;
filp->f_pos = offset; ctx->pos = offset;
goto out; goto out;
} }
filp->f_pos = offset; ctx->pos = offset;
/* Fetch inode info */ /* Fetch inode info */
ret = romfs_dev_read(i->i_sb, offset, &ri, ROMFH_SIZE); ret = romfs_dev_read(i->i_sb, offset, &ri, ROMFH_SIZE);
...@@ -194,16 +193,14 @@ static int romfs_readdir(struct file *filp, void *dirent, filldir_t filldir) ...@@ -194,16 +193,14 @@ static int romfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
nextfh = be32_to_cpu(ri.next); nextfh = be32_to_cpu(ri.next);
if ((nextfh & ROMFH_TYPE) == ROMFH_HRD) if ((nextfh & ROMFH_TYPE) == ROMFH_HRD)
ino = be32_to_cpu(ri.spec); ino = be32_to_cpu(ri.spec);
if (filldir(dirent, fsname, j, offset, ino, if (!dir_emit(ctx, fsname, j, ino,
romfs_dtype_table[nextfh & ROMFH_TYPE]) < 0) romfs_dtype_table[nextfh & ROMFH_TYPE]))
goto out; goto out;
stored++;
offset = nextfh & ROMFH_MASK; offset = nextfh & ROMFH_MASK;
} }
out: out:
return stored; return 0;
} }
/* /*
...@@ -281,7 +278,7 @@ static struct dentry *romfs_lookup(struct inode *dir, struct dentry *dentry, ...@@ -281,7 +278,7 @@ static struct dentry *romfs_lookup(struct inode *dir, struct dentry *dentry,
static const struct file_operations romfs_dir_operations = { static const struct file_operations romfs_dir_operations = {
.read = generic_read_dir, .read = generic_read_dir,
.readdir = romfs_readdir, .iterate = romfs_readdir,
.llseek = default_llseek, .llseek = default_llseek,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment