• Jiri Slaby's avatar
    r8152: napi hangup fix after disconnect · 0ee1f473
    Jiri Slaby authored
    When unplugging an r8152 adapter while the interface is UP, the NIC
    becomes unusable.  usb->disconnect (aka rtl8152_disconnect) deletes
    napi. Then, rtl8152_disconnect calls unregister_netdev and that invokes
    netdev->ndo_stop (aka rtl8152_close). rtl8152_close tries to
    napi_disable, but the napi is already deleted by disconnect above. So
    the first while loop in napi_disable never finishes. This results in
    complete deadlock of the network layer as there is rtnl_mutex held by
    unregister_netdev.
    
    So avoid the call to napi_disable in rtl8152_close when the device is
    already gone.
    
    The other calls to usb_kill_urb, cancel_delayed_work_sync,
    netif_stop_queue etc. seem to be fine. The urb and netdev is not
    destroyed yet.
    Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
    Cc: linux-usb@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0ee1f473
r8152.c 123 KB