• Olivier Sobrie's avatar
    hso: move tty_unregister outside hso_serial_common_free() · 69b377b3
    Olivier Sobrie authored
    The function hso_serial_common_free() is called either by the cleanup
    method of the tty or by the usb disconnect method.
    In the former case, the usb_disconnect() has been already called
    and the sysfs group associated to the device has been removed.
    By calling tty_unregister directly from the usb_disconnect() method,
    we avoid a warning due to the removal of the sysfs group of the usb
    device.
    
    Example of warning:
    ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 778 at fs/sysfs/group.c:225 sysfs_remove_group+0x50/0x94()
    sysfs group c0645a88 not found for kobject 'ttyHS5'
    Modules linked in:
    CPU: 0 PID: 778 Comm: kworker/0:3 Tainted: G        W      3.18.0+ #105
    Workqueue: events release_one_tty
    [<c000dfe4>] (unwind_backtrace) from [<c000c014>] (show_stack+0x14/0x1c)
    [<c000c014>] (show_stack) from [<c0016bac>] (warn_slowpath_common+0x5c/0x7c)
    [<c0016bac>] (warn_slowpath_common) from [<c0016c60>] (warn_slowpath_fmt+0x30/0x40)
    [<c0016c60>] (warn_slowpath_fmt) from [<c00ddd14>] (sysfs_remove_group+0x50/0x94)
    [<c00ddd14>] (sysfs_remove_group) from [<c0221e44>] (device_del+0x30/0x190)
    [<c0221e44>] (device_del) from [<c0221fb0>] (device_unregister+0xc/0x18)
    [<c0221fb0>] (device_unregister) from [<c0221fec>] (device_destroy+0x30/0x3c)
    [<c0221fec>] (device_destroy) from [<c01fe1dc>] (tty_unregister_device+0x2c/0x5c)
    [<c01fe1dc>] (tty_unregister_device) from [<c029a428>] (hso_serial_common_free+0x2c/0x88)
    [<c029a428>] (hso_serial_common_free) from [<c029a4c0>] (hso_serial_ref_free+0x3c/0xb8)
    [<c029a4c0>] (hso_serial_ref_free) from [<c01ff430>] (release_one_tty+0x30/0x84)
    [<c01ff430>] (release_one_tty) from [<c00271d4>] (process_one_work+0x21c/0x3c8)
    [<c00271d4>] (process_one_work) from [<c0027758>] (worker_thread+0x3d8/0x560)
    [<c0027758>] (worker_thread) from [<c002be4c>] (kthread+0xc0/0xcc)
    [<c002be4c>] (kthread) from [<c0009630>] (ret_from_fork+0x14/0x24)
    ---[ end trace cb88537fdc8fa208 ]---
    Signed-off-by: default avatarOlivier Sobrie <olivier@sobrie.be>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    69b377b3
hso.c 83 KB