mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
netfs: Delete subtree of 'fs/netfs' when netfs module exits
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: 7eb5b3e3a0
("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>
Link: https://lore.kernel.org/r/20240826113404.3214786-1-libaokun@huaweicloud.com
Acked-by: David Howells <dhowells@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
73ce1c9fce
commit
3c58a9575e
@ -142,7 +142,7 @@ static int __init netfs_init(void)
|
|||||||
|
|
||||||
error_fscache:
|
error_fscache:
|
||||||
error_procfile:
|
error_procfile:
|
||||||
remove_proc_entry("fs/netfs", NULL);
|
remove_proc_subtree("fs/netfs", NULL);
|
||||||
error_proc:
|
error_proc:
|
||||||
mempool_exit(&netfs_subrequest_pool);
|
mempool_exit(&netfs_subrequest_pool);
|
||||||
error_subreqpool:
|
error_subreqpool:
|
||||||
@ -159,7 +159,7 @@ fs_initcall(netfs_init);
|
|||||||
static void __exit netfs_exit(void)
|
static void __exit netfs_exit(void)
|
||||||
{
|
{
|
||||||
fscache_exit();
|
fscache_exit();
|
||||||
remove_proc_entry("fs/netfs", NULL);
|
remove_proc_subtree("fs/netfs", NULL);
|
||||||
mempool_exit(&netfs_subrequest_pool);
|
mempool_exit(&netfs_subrequest_pool);
|
||||||
kmem_cache_destroy(netfs_subrequest_slab);
|
kmem_cache_destroy(netfs_subrequest_slab);
|
||||||
mempool_exit(&netfs_request_pool);
|
mempool_exit(&netfs_request_pool);
|
||||||
|
Loading…
Reference in New Issue
Block a user