netconsole: take care of NETDEV_UNREGISTER event
When netconsole is loaded and a network interface fades away (e.g. on rmmod $interface_driver_module) the rmmod remains stuck and some locks are taken that prevent any additional module loading/unloading as well as interface up/down changes. In addition kernel logs (and console) get flooded at 10s interval with [ 122.464065] unregister_netdevice: waiting for eth0 to become free. Usage count = 1 [ 132.704059] unregister_netdevice: waiting for eth0 to become free. Usage count = 1 This patch lets netconsole take NETDEV_UNREGISTER event into account and release the affected interface if it was in use. Signed-off-by: Bruno Prémont <bonbons@linux-vserver.org> Acked-by: Matt Mackall <mpm@selenic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
acda074390
commit
2382b15bcc
@ -664,7 +664,7 @@ static int netconsole_netdev_event(struct notifier_block *this,
|
|||||||
struct netconsole_target *nt;
|
struct netconsole_target *nt;
|
||||||
struct net_device *dev = ptr;
|
struct net_device *dev = ptr;
|
||||||
|
|
||||||
if (!(event == NETDEV_CHANGENAME))
|
if (!(event == NETDEV_CHANGENAME || event == NETDEV_UNREGISTER))
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
spin_lock_irqsave(&target_list_lock, flags);
|
spin_lock_irqsave(&target_list_lock, flags);
|
||||||
@ -675,6 +675,15 @@ static int netconsole_netdev_event(struct notifier_block *this,
|
|||||||
case NETDEV_CHANGENAME:
|
case NETDEV_CHANGENAME:
|
||||||
strlcpy(nt->np.dev_name, dev->name, IFNAMSIZ);
|
strlcpy(nt->np.dev_name, dev->name, IFNAMSIZ);
|
||||||
break;
|
break;
|
||||||
|
case NETDEV_UNREGISTER:
|
||||||
|
if (!nt->enabled)
|
||||||
|
break;
|
||||||
|
netpoll_cleanup(&nt->np);
|
||||||
|
nt->enabled = 0;
|
||||||
|
printk(KERN_INFO "netconsole: network logging stopped"
|
||||||
|
", interface %s unregistered\n",
|
||||||
|
dev->name);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
netconsole_target_put(nt);
|
netconsole_target_put(nt);
|
||||||
|
Loading…
Reference in New Issue
Block a user