• Taehee Yoo's avatar
    hsr: avoid debugfs warning message when module is remove · 84bb59d7
    Taehee Yoo authored
    When hsr module is being removed, debugfs_remove() is called to remove
    both debugfs directory and file.
    
    When module is being removed, module state is changed to
    MODULE_STATE_GOING then exit() is called.
    At this moment, module couldn't be held so try_module_get()
    will be failed.
    
    debugfs's open() callback tries to hold the module if .owner is existing.
    If it fails, warning message is printed.
    
    CPU0				CPU1
    delete_module()
        try_stop_module()
        hsr_exit()			open() <-- WARNING
            debugfs_remove()
    
    In order to avoid the warning message, this patch makes hsr module does
    not set .owner. Unsetting .owner is safe because these are protected by
    inode_lock().
    
    Test commands:
        #SHELL1
        ip link add dummy0 type dummy
        ip link add dummy1 type dummy
        while :
        do
            ip link add hsr0 type hsr slave1 dummy0 slave2 dummy1
    	modprobe -rv hsr
        done
    
        #SHELL2
        while :
        do
            cat /sys/kernel/debug/hsr0/node_table
        done
    
    Splat looks like:
    [  101.223783][ T1271] ------------[ cut here ]------------
    [  101.230309][ T1271] debugfs file owner did not clean up at exit: node_table
    [  101.230380][ T1271] WARNING: CPU: 3 PID: 1271 at fs/debugfs/file.c:309 full_proxy_open+0x10f/0x650
    [  101.233153][ T1271] Modules linked in: hsr(-) dummy veth openvswitch nsh nf_conncount nf_nat nf_conntrack nf_d]
    [  101.237112][ T1271] CPU: 3 PID: 1271 Comm: cat Tainted: G        W         5.5.0-rc1+ #204
    [  101.238270][ T1271] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [  101.240379][ T1271] RIP: 0010:full_proxy_open+0x10f/0x650
    [  101.241166][ T1271] Code: 48 c1 ea 03 80 3c 02 00 0f 85 c1 04 00 00 49 8b 3c 24 e8 04 86 7e ff 84 c0 75 2d 4c 8
    [  101.251985][ T1271] RSP: 0018:ffff8880ca22fa38 EFLAGS: 00010286
    [  101.273355][ T1271] RAX: dffffc0000000008 RBX: ffff8880cc6e6200 RCX: 0000000000000000
    [  101.274466][ T1271] RDX: 0000000000000000 RSI: 0000000000000006 RDI: ffff8880c4dd5c14
    [  101.275581][ T1271] RBP: 0000000000000000 R08: fffffbfff2922f5d R09: 0000000000000000
    [  101.276733][ T1271] R10: 0000000000000001 R11: 0000000000000000 R12: ffffffffc0551bc0
    [  101.277853][ T1271] R13: ffff8880c4059a48 R14: ffff8880be50a5e0 R15: ffffffff941adaa0
    [  101.278956][ T1271] FS:  00007f8871cda540(0000) GS:ffff8880da800000(0000) knlGS:0000000000000000
    [  101.280216][ T1271] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  101.282832][ T1271] CR2: 00007f88717cfd10 CR3: 00000000b9440005 CR4: 00000000000606e0
    [  101.283974][ T1271] Call Trace:
    [  101.285328][ T1271]  do_dentry_open+0x63c/0xf50
    [  101.286077][ T1271]  ? open_proxy_open+0x270/0x270
    [  101.288271][ T1271]  ? __x64_sys_fchdir+0x180/0x180
    [  101.288987][ T1271]  ? inode_permission+0x65/0x390
    [  101.289682][ T1271]  path_openat+0x701/0x2810
    [  101.290294][ T1271]  ? path_lookupat+0x880/0x880
    [  101.290957][ T1271]  ? check_chain_key+0x236/0x5d0
    [  101.291676][ T1271]  ? __lock_acquire+0xdfe/0x3de0
    [  101.292358][ T1271]  ? sched_clock+0x5/0x10
    [  101.292962][ T1271]  ? sched_clock_cpu+0x18/0x170
    [  101.293644][ T1271]  ? find_held_lock+0x39/0x1d0
    [  101.305616][ T1271]  do_filp_open+0x17a/0x270
    [  101.306061][ T1271]  ? may_open_dev+0xc0/0xc0
    [ ... ]
    
    Fixes: fc4ecaee ("net: hsr: add debugfs support for display node list")
    Signed-off-by: default avatarTaehee Yoo <ap420073@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    84bb59d7
hsr_debugfs.c 3.2 KB