Commit f6224ba8 authored by David S. Miller's avatar David S. Miller

[NAPI]: Set SCHED before dev->open, clear if fails. Restore netif_running...

[NAPI]: Set SCHED before dev->open, clear if fails.  Restore netif_running check to netif_rx_schedule_prep.
parent 1ebcca47
...@@ -711,7 +711,8 @@ enum { ...@@ -711,7 +711,8 @@ enum {
static inline int netif_rx_schedule_prep(struct net_device *dev) static inline int netif_rx_schedule_prep(struct net_device *dev)
{ {
return !test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state); return netif_running(dev) &&
!test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state);
} }
/* Add interface to tail of rx poll list. This assumes that _prep has /* Add interface to tail of rx poll list. This assumes that _prep has
......
...@@ -694,11 +694,15 @@ int dev_open(struct net_device *dev) ...@@ -694,11 +694,15 @@ int dev_open(struct net_device *dev)
* Call device private open method * Call device private open method
*/ */
if (try_inc_mod_count(dev->owner)) { if (try_inc_mod_count(dev->owner)) {
set_bit(__LINK_STATE_START, &dev->state);
if (dev->open) { if (dev->open) {
ret = dev->open(dev); ret = dev->open(dev);
if (ret && dev->owner) if (ret) {
clear_bit(__LINK_STATE_START, &dev->state);
if (dev->owner)
__MOD_DEC_USE_COUNT(dev->owner); __MOD_DEC_USE_COUNT(dev->owner);
} }
}
} else { } else {
ret = -ENODEV; ret = -ENODEV;
} }
...@@ -713,8 +717,6 @@ int dev_open(struct net_device *dev) ...@@ -713,8 +717,6 @@ int dev_open(struct net_device *dev)
*/ */
dev->flags |= IFF_UP; dev->flags |= IFF_UP;
set_bit(__LINK_STATE_START, &dev->state);
/* /*
* Initialize multicasting status * Initialize multicasting status
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment