| From 442bd30c3f45f3e485c78bec5d942876ae59361e Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 18 Oct 2022 12:40:04 +0800 |
| Subject: orangefs: Fix sysfs not cleanup when dev init failed |
| |
| From: Zhang Xiaoxu <zhangxiaoxu5@huawei.com> |
| |
| [ Upstream commit ea60a4ad0cf88b411cde6888b8c890935686ecd7 ] |
| |
| When the dev init failed, should cleanup the sysfs, otherwise, the |
| module will never be loaded since can not create duplicate sysfs |
| directory: |
| |
| sysfs: cannot create duplicate filename '/fs/orangefs' |
| |
| CPU: 1 PID: 6549 Comm: insmod Tainted: G W 6.0.0+ #44 |
| Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-1.fc33 04/01/2014 |
| Call Trace: |
| <TASK> |
| dump_stack_lvl+0x34/0x44 |
| sysfs_warn_dup.cold+0x17/0x24 |
| sysfs_create_dir_ns+0x16d/0x180 |
| kobject_add_internal+0x156/0x3a0 |
| kobject_init_and_add+0xcf/0x120 |
| orangefs_sysfs_init+0x7e/0x3a0 [orangefs] |
| orangefs_init+0xfe/0x1000 [orangefs] |
| do_one_initcall+0x87/0x2a0 |
| do_init_module+0xdf/0x320 |
| load_module+0x2f98/0x3330 |
| __do_sys_finit_module+0x113/0x1b0 |
| do_syscall_64+0x35/0x80 |
| entry_SYSCALL_64_after_hwframe+0x46/0xb0 |
| |
| kobject_add_internal failed for orangefs with -EEXIST, don't try to register things with the same name in the same directory. |
| |
| Fixes: 2f83ace37181 ("orangefs: put register_chrdev immediately before register_filesystem") |
| Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@huawei.com> |
| Signed-off-by: Mike Marshall <hubcap@omnibond.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/orangefs/orangefs-mod.c | 8 ++++---- |
| 1 file changed, 4 insertions(+), 4 deletions(-) |
| |
| diff --git a/fs/orangefs/orangefs-mod.c b/fs/orangefs/orangefs-mod.c |
| index 4113eb0495bf..74b8ee19e167 100644 |
| --- a/fs/orangefs/orangefs-mod.c |
| +++ b/fs/orangefs/orangefs-mod.c |
| @@ -147,7 +147,7 @@ static int __init orangefs_init(void) |
| gossip_err("%s: could not initialize device subsystem %d!\n", |
| __func__, |
| ret); |
| - goto cleanup_device; |
| + goto cleanup_sysfs; |
| } |
| |
| ret = register_filesystem(&orangefs_fs_type); |
| @@ -159,11 +159,11 @@ static int __init orangefs_init(void) |
| goto out; |
| } |
| |
| - orangefs_sysfs_exit(); |
| - |
| -cleanup_device: |
| orangefs_dev_cleanup(); |
| |
| +cleanup_sysfs: |
| + orangefs_sysfs_exit(); |
| + |
| sysfs_init_failed: |
| |
| debugfs_init_failed: |
| -- |
| 2.35.1 |
| |