Skip to content
  • Bjørn Mork's avatar
    net: usbnet: fix softirq storm on suspend · 85e87870
    Bjørn Mork authored
    Suspending an open usbnet device results in constant
    rescheduling of usbnet_bh.
    
    commit 65841fd5
    
     "usbnet: handle remote wakeup asap"
    refactored the usbnet_bh code to allow sharing the
    urb allocate and submit code with usbnet_resume. In
    this process, a test for, and immediate return on,
    ENOLINK from rx_submit was unintentionally dropped.
    
    The rx queue will not grow if rx_submit fails,
    making usbnet_bh reschedule itself.  This results
    in a softirq storm if the error is persistent.
    rx_submit translates the usb_submit_urb error
    EHOSTUNREACH into ENOLINK, so this is an expected
    and persistent error for a suspended device. The
    old code tested for this condition and avoided
    rescheduling.  Putting this test back.
    
    Cc: <stable@vger.kernel.org> # v3.5
    Cc: Ming Lei <ming.lei@canonical.com>
    Cc: Oliver Neukum <oneukum@suse.de>
    Signed-off-by: default avatarBjørn Mork <bjorn@mork.no>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    85e87870