Loading fs/romfs/super.c +9 −12 Original line number Original line Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading @@ -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; } } /* /* Loading Loading @@ -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, }; }; Loading Loading
fs/romfs/super.c +9 −12 Original line number Original line Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading @@ -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; } } /* /* Loading Loading @@ -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, }; }; Loading