fs/tracefs/event_inode.c | 6 ++++-- fs/tracefs/internal.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/fs/tracefs/event_inode.c b/fs/tracefs/event_inode.c index 6795fda2af19..0b52ec111cf3 100644 --- a/fs/tracefs/event_inode.c +++ b/fs/tracefs/event_inode.c @@ -395,8 +395,7 @@ static struct dentry *create_dir(struct eventfs_inode *ei, struct dentry *parent inode->i_op = &eventfs_root_dir_inode_operations; inode->i_fop = &eventfs_file_operations; - /* All directories will have the same inode number */ - inode->i_ino = EVENTFS_DIR_INODE_INO; + inode->i_ino = ei->ino; ti = get_tracefs(inode); ti->flags |= TRACEFS_EVENT_INODE; @@ -859,6 +858,7 @@ struct eventfs_inode *eventfs_create_dir(const char *name, struct eventfs_inode int size, void *data) { struct eventfs_inode *ei; + static int ino_counter = EVENTFS_DIR_INODE_INO; if (!parent) return ERR_PTR(-EINVAL); @@ -889,6 +889,8 @@ struct eventfs_inode *eventfs_create_dir(const char *name, struct eventfs_inode INIT_LIST_HEAD(&ei->list); mutex_lock(&eventfs_mutex); + ei->ino = ++ino_counter; + if (!parent->is_freed) { list_add_tail(&ei->list, &parent->children); ei->d_parent = parent->dentry; diff --git a/fs/tracefs/internal.h b/fs/tracefs/internal.h index 12b7d0150ae9..1a574d306ea9 100644 --- a/fs/tracefs/internal.h +++ b/fs/tracefs/internal.h @@ -64,6 +64,7 @@ struct eventfs_inode { struct llist_node llist; struct rcu_head rcu; }; + unsigned int ino; unsigned int is_freed:1; unsigned int is_events:1; unsigned int nr_entries:30;