Loading fs/openpromfs/inode.c +44 −51 Original line number Diff line number Diff line Loading @@ -162,11 +162,11 @@ static const struct file_operations openpromfs_prop_ops = { .release = seq_release, }; static int openpromfs_readdir(struct file *, void *, filldir_t); static int openpromfs_readdir(struct file *, struct dir_context *); static const struct file_operations openprom_operations = { .read = generic_read_dir, .readdir = openpromfs_readdir, .iterate = openpromfs_readdir, .llseek = generic_file_llseek, }; Loading Loading @@ -260,38 +260,31 @@ static struct dentry *openpromfs_lookup(struct inode *dir, struct dentry *dentry return NULL; } static int openpromfs_readdir(struct file * filp, void * dirent, filldir_t filldir) static int openpromfs_readdir(struct file *file, struct dir_context *ctx) { struct inode *inode = file_inode(filp); struct inode *inode = file_inode(file); struct op_inode_info *oi = OP_I(inode); struct device_node *dp = oi->u.node; struct device_node *child; struct property *prop; unsigned int ino; int i; mutex_lock(&op_mutex); ino = inode->i_ino; i = filp->f_pos; switch (i) { case 0: if (filldir(dirent, ".", 1, i, ino, DT_DIR) < 0) if (ctx->pos == 0) { if (!dir_emit(ctx, ".", 1, inode->i_ino, DT_DIR)) goto out; i++; filp->f_pos++; /* fall thru */ case 1: if (filldir(dirent, "..", 2, i, ctx->pos = 1; } if (ctx->pos == 1) { if (!dir_emit(ctx, "..", 2, (dp->parent == NULL ? OPENPROM_ROOT_INO : dp->parent->unique_id), DT_DIR) < 0) dp->parent->unique_id), DT_DIR)) goto out; i++; filp->f_pos++; /* fall thru */ default: i -= 2; ctx->pos = 2; } i = ctx->pos - 2; /* First, the children nodes as directories. */ child = dp->child; Loading @@ -300,13 +293,13 @@ static int openpromfs_readdir(struct file * filp, void * dirent, filldir_t filld i--; } while (child) { if (filldir(dirent, if (!dir_emit(ctx, child->path_component_name, strlen(child->path_component_name), filp->f_pos, child->unique_id, DT_DIR) < 0) child->unique_id, DT_DIR)) goto out; filp->f_pos++; ctx->pos++; child = child->sibling; } Loading @@ -317,14 +310,14 @@ static int openpromfs_readdir(struct file * filp, void * dirent, filldir_t filld i--; } while (prop) { if (filldir(dirent, prop->name, strlen(prop->name), filp->f_pos, prop->unique_id, DT_REG) < 0) if (!dir_emit(ctx, prop->name, strlen(prop->name), prop->unique_id, DT_REG)) goto out; filp->f_pos++; ctx->pos++; prop = prop->next; } } out: mutex_unlock(&op_mutex); return 0; Loading Loading
fs/openpromfs/inode.c +44 −51 Original line number Diff line number Diff line Loading @@ -162,11 +162,11 @@ static const struct file_operations openpromfs_prop_ops = { .release = seq_release, }; static int openpromfs_readdir(struct file *, void *, filldir_t); static int openpromfs_readdir(struct file *, struct dir_context *); static const struct file_operations openprom_operations = { .read = generic_read_dir, .readdir = openpromfs_readdir, .iterate = openpromfs_readdir, .llseek = generic_file_llseek, }; Loading Loading @@ -260,38 +260,31 @@ static struct dentry *openpromfs_lookup(struct inode *dir, struct dentry *dentry return NULL; } static int openpromfs_readdir(struct file * filp, void * dirent, filldir_t filldir) static int openpromfs_readdir(struct file *file, struct dir_context *ctx) { struct inode *inode = file_inode(filp); struct inode *inode = file_inode(file); struct op_inode_info *oi = OP_I(inode); struct device_node *dp = oi->u.node; struct device_node *child; struct property *prop; unsigned int ino; int i; mutex_lock(&op_mutex); ino = inode->i_ino; i = filp->f_pos; switch (i) { case 0: if (filldir(dirent, ".", 1, i, ino, DT_DIR) < 0) if (ctx->pos == 0) { if (!dir_emit(ctx, ".", 1, inode->i_ino, DT_DIR)) goto out; i++; filp->f_pos++; /* fall thru */ case 1: if (filldir(dirent, "..", 2, i, ctx->pos = 1; } if (ctx->pos == 1) { if (!dir_emit(ctx, "..", 2, (dp->parent == NULL ? OPENPROM_ROOT_INO : dp->parent->unique_id), DT_DIR) < 0) dp->parent->unique_id), DT_DIR)) goto out; i++; filp->f_pos++; /* fall thru */ default: i -= 2; ctx->pos = 2; } i = ctx->pos - 2; /* First, the children nodes as directories. */ child = dp->child; Loading @@ -300,13 +293,13 @@ static int openpromfs_readdir(struct file * filp, void * dirent, filldir_t filld i--; } while (child) { if (filldir(dirent, if (!dir_emit(ctx, child->path_component_name, strlen(child->path_component_name), filp->f_pos, child->unique_id, DT_DIR) < 0) child->unique_id, DT_DIR)) goto out; filp->f_pos++; ctx->pos++; child = child->sibling; } Loading @@ -317,14 +310,14 @@ static int openpromfs_readdir(struct file * filp, void * dirent, filldir_t filld i--; } while (prop) { if (filldir(dirent, prop->name, strlen(prop->name), filp->f_pos, prop->unique_id, DT_REG) < 0) if (!dir_emit(ctx, prop->name, strlen(prop->name), prop->unique_id, DT_REG)) goto out; filp->f_pos++; ctx->pos++; prop = prop->next; } } out: mutex_unlock(&op_mutex); return 0; Loading