On 07/26, Oleg Nesterov wrote: > > Testing: seems to work, but assumes that debugs was fixed too. Hopefully > "debugfs: debugfs_remove_recursive() must not rely on list_empty(d_subdirs)" > is fine. > > (We should probably make debugfs_remove_recursive() to return the error > and trace_events.c should warn if it fails) > > However: I am still testing this patches, so this is still mostly for > review. I'll report if I find anything,
I tried to play more with these patches, and didn't find anything wrong. However, after I re-read 6/6 I think it should be updated: - remove_event_file_dir() needs to check file->dir != NULL it can be NULL if event_create_dir()->debugfs_create_dir() fails, or if event_create_dir() fails before. - I've also added spin_lock(d_lock) and d_inode != NULL check. I do not think this is needed. Afaics __create_file() can't leave the !debugfs_positive() file on ->d_subdirs list if debugfs_get_inode() fails, dput()->d_kill() should remove it. But I do not understand this code enough, and debugfs checks d_inode != NULL all the time. I am sending "PATCH v3 6/6" in reply to "PATCH v2 6/6". See the diff below. So I am waiting for your review. If you and Masami agree with these changes I'll resend other fixes (1 from me and 2 from Steven) on top of this series. Oleg. --- x/kernel/trace/trace_events.c +++ x/kernel/trace/trace_events.c @@ -431,12 +431,18 @@ static void remove_event_file_dir(struct struct dentry *dir = file->dir; struct dentry *child; - /* ->i_mutex is not needed, nobody can create/remove a file */ - list_for_each_entry(child, &dir->d_subdirs, d_u.d_child) - child->d_inode->i_private = NULL; + if (dir) { + spin_lock(&dir->d_lock); /* probably unneeded */ + list_for_each_entry(child, &dir->d_subdirs, d_u.d_child) { + if (child->d_inode) /* probably unneeded */ + child->d_inode->i_private = NULL; + } + spin_unlock(&dir->d_lock); + + debugfs_remove_recursive(dir); + } list_del(&file->list); - debugfs_remove_recursive(dir); remove_subsystem(file->system); kmem_cache_free(file_cachep, file); } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/