diff mbox series

netfs: Delete subtree of 'fs/netfs' when netfs module exits

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

Commit Message

Baokun Li Aug. 26, 2024, 11:34 a.m. UTC
From: Baokun Li <libaokun1@huawei.com>

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>
---
 fs/netfs/main.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

David Howells Aug. 28, 2024, 10:37 a.m. UTC | #1
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
Christian Brauner Aug. 28, 2024, 11:22 a.m. UTC | #2
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
Baokun Li Aug. 28, 2024, 12:11 p.m. UTC | #3
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!
Baokun Li Aug. 28, 2024, 12:13 p.m. UTC | #4
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
Christian Brauner Aug. 28, 2024, 1:37 p.m. UTC | #5
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.
Baokun Li Aug. 28, 2024, 1:42 p.m. UTC | #6
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 mbox series

Patch

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);