|
@@ -3168,11 +3168,20 @@ static int bond_slave_netdev_event(unsigned long event,
|
|
|
struct net_device *slave_dev)
|
|
|
{
|
|
|
struct slave *slave = bond_slave_get_rtnl(slave_dev);
|
|
|
- struct bonding *bond = slave->bond;
|
|
|
- struct net_device *bond_dev = slave->bond->dev;
|
|
|
+ struct bonding *bond;
|
|
|
+ struct net_device *bond_dev;
|
|
|
u32 old_speed;
|
|
|
u8 old_duplex;
|
|
|
|
|
|
+ /* A netdev event can be generated while enslaving a device
|
|
|
+ * before netdev_rx_handler_register is called in which case
|
|
|
+ * slave will be NULL
|
|
|
+ */
|
|
|
+ if (!slave)
|
|
|
+ return NOTIFY_DONE;
|
|
|
+ bond_dev = slave->bond->dev;
|
|
|
+ bond = slave->bond;
|
|
|
+
|
|
|
switch (event) {
|
|
|
case NETDEV_UNREGISTER:
|
|
|
if (bond->setup_by_slave)
|