sorry longer delay, been a bit busy but here is the result from that new patch. Only applied this patch so if the previous one is needed also, let me know and I'll rerun it. --Ilkka On Thu, May 30, 2024 at 5:00 PM Steven Rostedt <rostedt@xxxxxxxxxxx> wrote: > > On Thu, 30 May 2024 16:02:37 +0300 > Ilkka Naulapää <digirigawa@xxxxxxxxx> wrote: > > > applied your patch and here's the output. > > > > Unfortunately, it doesn't give me any new information. I added one more > BUG on, want to try this? Otherwise, I'm pretty much at a lost. :-/ > > -- Steve > > diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c > index de5b72216b1a..a090495e78c9 100644 > --- a/fs/tracefs/inode.c > +++ b/fs/tracefs/inode.c > @@ -39,13 +39,17 @@ static struct inode *tracefs_alloc_inode(struct super_block *sb) > return NULL; > > ti->flags = 0; > + ti->magic = 20240823; > > return &ti->vfs_inode; > } > > static void tracefs_free_inode(struct inode *inode) > { > - kmem_cache_free(tracefs_inode_cachep, get_tracefs(inode)); > + struct tracefs_inode *ti = get_tracefs(inode); > + > + BUG_ON(ti->magic != 20240823); > + kmem_cache_free(tracefs_inode_cachep, ti); > } > > static ssize_t default_read_file(struct file *file, char __user *buf, > @@ -147,16 +151,6 @@ static const struct inode_operations tracefs_dir_inode_operations = { > .rmdir = tracefs_syscall_rmdir, > }; > > -struct inode *tracefs_get_inode(struct super_block *sb) > -{ > - struct inode *inode = new_inode(sb); > - if (inode) { > - inode->i_ino = get_next_ino(); > - inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode); > - } > - return inode; > -} > - > struct tracefs_mount_opts { > kuid_t uid; > kgid_t gid; > @@ -384,6 +378,7 @@ static void tracefs_dentry_iput(struct dentry *dentry, struct inode *inode) > return; > > ti = get_tracefs(inode); > + BUG_ON(ti->magic != 20240823); > if (ti && ti->flags & TRACEFS_EVENT_INODE) > eventfs_set_ef_status_free(dentry); > iput(inode); > @@ -568,6 +563,18 @@ struct dentry *eventfs_end_creating(struct dentry *dentry) > return dentry; > } > > +struct inode *tracefs_get_inode(struct super_block *sb) > +{ > + struct inode *inode = new_inode(sb); > + > + BUG_ON(sb->s_op != &tracefs_super_operations); > + if (inode) { > + inode->i_ino = get_next_ino(); > + inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode); > + } > + return inode; > +} > + > /** > * tracefs_create_file - create a file in the tracefs filesystem > * @name: a pointer to a string containing the name of the file to create. > diff --git a/fs/tracefs/internal.h b/fs/tracefs/internal.h > index 69c2b1d87c46..9059b8b11bb6 100644 > --- a/fs/tracefs/internal.h > +++ b/fs/tracefs/internal.h > @@ -9,12 +9,15 @@ enum { > struct tracefs_inode { > unsigned long flags; > void *private; > + unsigned long magic; > struct inode vfs_inode; > }; > > static inline struct tracefs_inode *get_tracefs(const struct inode *inode) > { > - return container_of(inode, struct tracefs_inode, vfs_inode); > + struct tracefs_inode *ti = container_of(inode, struct tracefs_inode, vfs_inode); > + BUG_ON(ti->magic != 20240823); > + return ti; > } > > struct dentry *tracefs_start_creating(const char *name, struct dentry *parent);
Attachment:
6.6-rc1-steve-patch-2.jpeg
Description: JPEG image