diff options
author | Steve Glendinning <steve.glendinning@shawell.net> | 2012-11-08 06:26:21 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-09 16:59:32 -0500 |
commit | 9532021da6da48351ce48a079c673df8e3930b4a (patch) | |
tree | 13c3514760ea7c0c8dce8ce17257fc889239a5db /drivers/net/usb/usbnet.c | |
parent | 60713a0ca7fd6651b951cc1b4dbd528d1fc0281b (diff) | |
download | op-kernel-dev-9532021da6da48351ce48a079c673df8e3930b4a.zip op-kernel-dev-9532021da6da48351ce48a079c673df8e3930b4a.tar.gz |
usbnet: ratelimit kevent may have been dropped warnings
when something goes wrong, a flood of these messages can be
generated by usbnet (thousands per second). This doesn't
generally *help* the condition so this patch ratelimits the
rate of their generation.
There's an underlying problem in usbnet's kevent deferral
mechanism which needs fixing, specifically that events *can*
get dropped and not handled. This patch doesn't address this,
but just mitigates fallout caused by the current implemention.
Signed-off-by: Steve Glendinning <steve.glendinning@shawell.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/usb/usbnet.c')
-rw-r--r-- | drivers/net/usb/usbnet.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index cb04f90..edb81ed 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -359,10 +359,12 @@ static enum skb_state defer_bh(struct usbnet *dev, struct sk_buff *skb, void usbnet_defer_kevent (struct usbnet *dev, int work) { set_bit (work, &dev->flags); - if (!schedule_work (&dev->kevent)) - netdev_err(dev->net, "kevent %d may have been dropped\n", work); - else + if (!schedule_work (&dev->kevent)) { + if (net_ratelimit()) + netdev_err(dev->net, "kevent %d may have been dropped\n", work); + } else { netdev_dbg(dev->net, "kevent %d scheduled\n", work); + } } EXPORT_SYMBOL_GPL(usbnet_defer_kevent); |