forked from Minki/linux
cnic: Improve NETDEV_UP event handling
During NETDEV_UP, we use symbol_get() to get the net driver's cnic probe function. This sometimes doesn't work if NETDEV_UP happens right after NETDEV_REGISTER and the net driver is still running module init code. As a result, the cnic device may not be discovered. We fix this by probing on all NETDEV events if the device's netif_running state is up. Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
11f23aa8cc
commit
db1d350fcb
@ -5342,7 +5342,7 @@ static int cnic_netdev_event(struct notifier_block *this, unsigned long event,
|
||||
|
||||
dev = cnic_from_netdev(netdev);
|
||||
|
||||
if (!dev && (event == NETDEV_REGISTER || event == NETDEV_UP)) {
|
||||
if (!dev && (event == NETDEV_REGISTER || netif_running(netdev))) {
|
||||
/* Check for the hot-plug device */
|
||||
dev = is_cnic_dev(netdev);
|
||||
if (dev) {
|
||||
@ -5358,7 +5358,7 @@ static int cnic_netdev_event(struct notifier_block *this, unsigned long event,
|
||||
else if (event == NETDEV_UNREGISTER)
|
||||
cnic_ulp_exit(dev);
|
||||
|
||||
if (event == NETDEV_UP) {
|
||||
if (event == NETDEV_UP || (new_dev && netif_running(netdev))) {
|
||||
if (cnic_register_netdev(dev) != 0) {
|
||||
cnic_put(dev);
|
||||
goto done;
|
||||
|
Loading…
Reference in New Issue
Block a user