Message ID | 20240826113404.3214786-1-libaokun@huaweicloud.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | netfs: Delete subtree of 'fs/netfs' when netfs module exits | expand |
libaokun@huaweicloud.com wrote: > In netfs_init() or fscache_proc_init(), we create dentry under 'fs/netfs', > but in netfs_exit(), we only delete the proc entry of 'fs/netfs' without > deleting its subtree. This triggers the following WARNING: > > ================================================================== > remove_proc_entry: removing non-empty directory 'fs/netfs', leaking at least 'requests' > WARNING: CPU: 4 PID: 566 at fs/proc/generic.c:717 remove_proc_entry+0x160/0x1c0 > Modules linked in: netfs(-) > CPU: 4 UID: 0 PID: 566 Comm: rmmod Not tainted 6.11.0-rc3 #860 > RIP: 0010:remove_proc_entry+0x160/0x1c0 > Call Trace: > <TASK> > netfs_exit+0x12/0x620 [netfs] > __do_sys_delete_module.isra.0+0x14c/0x2e0 > do_syscall_64+0x4b/0x110 > entry_SYSCALL_64_after_hwframe+0x76/0x7e > ================================================================== > > Therefore use remove_proc_subtree instead() of remove_proc_entry() to > fix the above problem. > > Fixes: 7eb5b3e3a0a5 ("netfs, fscache: Move /proc/fs/fscache to /proc/fs/netfs and put in a symlink") > Cc: stable@kernel.org > Signed-off-by: Baokun Li <libaokun1@huawei.com> Should remove_proc_entry() just remove the entire subtree anyway? But you can add: Acked-by: David Howells <dhowells@redhat.com> David
On Mon, 26 Aug 2024 19:34:04 +0800, libaokun@huaweicloud.com wrote: > In netfs_init() or fscache_proc_init(), we create dentry under 'fs/netfs', > but in netfs_exit(), we only delete the proc entry of 'fs/netfs' without > deleting its subtree. This triggers the following WARNING: > > ================================================================== > remove_proc_entry: removing non-empty directory 'fs/netfs', leaking at least 'requests' > WARNING: CPU: 4 PID: 566 at fs/proc/generic.c:717 remove_proc_entry+0x160/0x1c0 > Modules linked in: netfs(-) > CPU: 4 UID: 0 PID: 566 Comm: rmmod Not tainted 6.11.0-rc3 #860 > RIP: 0010:remove_proc_entry+0x160/0x1c0 > Call Trace: > <TASK> > netfs_exit+0x12/0x620 [netfs] > __do_sys_delete_module.isra.0+0x14c/0x2e0 > do_syscall_64+0x4b/0x110 > entry_SYSCALL_64_after_hwframe+0x76/0x7e > ================================================================== > > [...] Applied to the vfs.misc branch of the vfs/vfs.git tree. Patches in the vfs.misc branch should appear in linux-next soon. Please report any outstanding bugs that were missed during review in a new review to the original patch series allowing us to drop it. It's encouraged to provide Acked-bys and Reviewed-bys even though the patch has now been applied. If possible patch trailers will be updated. Note that commit hashes shown below are subject to change due to rebase, trailer updates or similar. If in doubt, please check the listed branch. tree: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git branch: vfs.misc [1/1] netfs: Delete subtree of 'fs/netfs' when netfs module exits https://git.kernel.org/vfs/vfs/c/0aef59b3eabb
Hi David, On 2024/8/28 18:37, David Howells wrote: > libaokun@huaweicloud.com wrote: > >> In netfs_init() or fscache_proc_init(), we create dentry under 'fs/netfs', >> but in netfs_exit(), we only delete the proc entry of 'fs/netfs' without >> deleting its subtree. This triggers the following WARNING: >> >> ================================================================== >> remove_proc_entry: removing non-empty directory 'fs/netfs', leaking at least 'requests' >> WARNING: CPU: 4 PID: 566 at fs/proc/generic.c:717 remove_proc_entry+0x160/0x1c0 >> Modules linked in: netfs(-) >> CPU: 4 UID: 0 PID: 566 Comm: rmmod Not tainted 6.11.0-rc3 #860 >> RIP: 0010:remove_proc_entry+0x160/0x1c0 >> Call Trace: >> <TASK> >> netfs_exit+0x12/0x620 [netfs] >> __do_sys_delete_module.isra.0+0x14c/0x2e0 >> do_syscall_64+0x4b/0x110 >> entry_SYSCALL_64_after_hwframe+0x76/0x7e >> ================================================================== >> >> Therefore use remove_proc_subtree instead() of remove_proc_entry() to >> fix the above problem. >> >> Fixes: 7eb5b3e3a0a5 ("netfs, fscache: Move /proc/fs/fscache to /proc/fs/netfs and put in a symlink") >> Cc: stable@kernel.org >> Signed-off-by: Baokun Li <libaokun1@huawei.com> > Should remove_proc_entry() just remove the entire subtree anyway? Yeah, in general, when we remove a proc entry, we don't care if it has subtrees. But I'm not sure if there are certain scenarios where entries must be removed in a certain order . > > But you can add: > > Acked-by: David Howells <dhowells@redhat.com> > > David Thanks for your ack!
On 2024/8/28 19:22, Christian Brauner wrote: > On Mon, 26 Aug 2024 19:34:04 +0800, libaokun@huaweicloud.com wrote: >> In netfs_init() or fscache_proc_init(), we create dentry under 'fs/netfs', >> but in netfs_exit(), we only delete the proc entry of 'fs/netfs' without >> deleting its subtree. This triggers the following WARNING: >> >> ================================================================== >> remove_proc_entry: removing non-empty directory 'fs/netfs', leaking at least 'requests' >> WARNING: CPU: 4 PID: 566 at fs/proc/generic.c:717 remove_proc_entry+0x160/0x1c0 >> Modules linked in: netfs(-) >> CPU: 4 UID: 0 PID: 566 Comm: rmmod Not tainted 6.11.0-rc3 #860 >> RIP: 0010:remove_proc_entry+0x160/0x1c0 >> Call Trace: >> <TASK> >> netfs_exit+0x12/0x620 [netfs] >> __do_sys_delete_module.isra.0+0x14c/0x2e0 >> do_syscall_64+0x4b/0x110 >> entry_SYSCALL_64_after_hwframe+0x76/0x7e >> ================================================================== Hi Christian, Thank you for applying this patch! I just realized that the parentheses are in the wrong place here, could you please help me correct them? >> Therefore use remove_proc_subtree instead() of remove_proc_entry() to ^^ remove_proc_subtree() instead Regards, Baokun > Applied to the vfs.misc branch of the vfs/vfs.git tree. > Patches in the vfs.misc branch should appear in linux-next soon. > > Please report any outstanding bugs that were missed during review in a > new review to the original patch series allowing us to drop it. > > It's encouraged to provide Acked-bys and Reviewed-bys even though the > patch has now been applied. If possible patch trailers will be updated. > > Note that commit hashes shown below are subject to change due to rebase, > trailer updates or similar. If in doubt, please check the listed branch. > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git > branch: vfs.misc > > [1/1] netfs: Delete subtree of 'fs/netfs' when netfs module exits > https://git.kernel.org/vfs/vfs/c/0aef59b3eabb
On Wed, Aug 28, 2024 at 08:13:54PM GMT, Baokun Li wrote: > On 2024/8/28 19:22, Christian Brauner wrote: > > On Mon, 26 Aug 2024 19:34:04 +0800, libaokun@huaweicloud.com wrote: > > > In netfs_init() or fscache_proc_init(), we create dentry under 'fs/netfs', > > > but in netfs_exit(), we only delete the proc entry of 'fs/netfs' without > > > deleting its subtree. This triggers the following WARNING: > > > > > > ================================================================== > > > remove_proc_entry: removing non-empty directory 'fs/netfs', leaking at least 'requests' > > > WARNING: CPU: 4 PID: 566 at fs/proc/generic.c:717 remove_proc_entry+0x160/0x1c0 > > > Modules linked in: netfs(-) > > > CPU: 4 UID: 0 PID: 566 Comm: rmmod Not tainted 6.11.0-rc3 #860 > > > RIP: 0010:remove_proc_entry+0x160/0x1c0 > > > Call Trace: > > > <TASK> > > > netfs_exit+0x12/0x620 [netfs] > > > __do_sys_delete_module.isra.0+0x14c/0x2e0 > > > do_syscall_64+0x4b/0x110 > > > entry_SYSCALL_64_after_hwframe+0x76/0x7e > > > ================================================================== > > Hi Christian, > > > Thank you for applying this patch! > > I just realized that the parentheses are in the wrong place here, > could you please help me correct them? > > > Therefore use remove_proc_subtree instead() of remove_proc_entry() to > ^^ remove_proc_subtree() instead Sure, done.
On 2024/8/28 21:37, Christian Brauner wrote: >> Hi Christian, >> >> >> Thank you for applying this patch! >> >> I just realized that the parentheses are in the wrong place here, >> could you please help me correct them? >>>> Therefore use remove_proc_subtree instead() of remove_proc_entry() to >> ^^ remove_proc_subtree() instead > Sure, done. > Thanks a lot! Cheers, Baokun
diff --git a/fs/netfs/main.c b/fs/netfs/main.c index 5f0f438e5d21..9d6b49dc6694 100644 --- a/fs/netfs/main.c +++ b/fs/netfs/main.c @@ -142,7 +142,7 @@ static int __init netfs_init(void) error_fscache: error_procfile: - remove_proc_entry("fs/netfs", NULL); + remove_proc_subtree("fs/netfs", NULL); error_proc: mempool_exit(&netfs_subrequest_pool); error_subreqpool: @@ -159,7 +159,7 @@ fs_initcall(netfs_init); static void __exit netfs_exit(void) { fscache_exit(); - remove_proc_entry("fs/netfs", NULL); + remove_proc_subtree("fs/netfs", NULL); mempool_exit(&netfs_subrequest_pool); kmem_cache_destroy(netfs_subrequest_slab); mempool_exit(&netfs_request_pool);