diff options
| -rw-r--r-- | drivers/net/bonding/bond_main.c | 2 | ||||
| -rw-r--r-- | drivers/net/netconsole.c | 26 | ||||
| -rw-r--r-- | include/linux/notifier.h | 1 | 
3 files changed, 20 insertions, 9 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 088fd845ffd..f4960f516c3 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -1640,6 +1640,8 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)  		}  	} +	call_netdevice_notifiers(NETDEV_JOIN, slave_dev); +  	/* If this is the first slave, then we need to set the master's hardware  	 * address to be the same as the slave's. */  	if (is_zero_ether_addr(bond->dev->dev_addr)) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index a83e101440f..4190786de40 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -621,11 +621,10 @@ static int netconsole_netdev_event(struct notifier_block *this,  	bool stopped = false;  	if (!(event == NETDEV_CHANGENAME || event == NETDEV_UNREGISTER || -	      event == NETDEV_BONDING_DESLAVE || event == NETDEV_GOING_DOWN)) +	      event == NETDEV_BONDING_DESLAVE || event == NETDEV_JOIN))  		goto done;  	spin_lock_irqsave(&target_list_lock, flags); -restart:  	list_for_each_entry(nt, &target_list, list) {  		netconsole_target_get(nt);  		if (nt->np.dev == dev) { @@ -633,6 +632,8 @@ restart:  			case NETDEV_CHANGENAME:  				strlcpy(nt->np.dev_name, dev->name, IFNAMSIZ);  				break; +			case NETDEV_BONDING_DESLAVE: +			case NETDEV_JOIN:  			case NETDEV_UNREGISTER:  				/*  				 * rtnl_lock already held @@ -647,11 +648,7 @@ restart:  					dev_put(nt->np.dev);  					nt->np.dev = NULL;  					netconsole_target_put(nt); -					goto restart;  				} -				/* Fall through */ -			case NETDEV_GOING_DOWN: -			case NETDEV_BONDING_DESLAVE:  				nt->enabled = 0;  				stopped = true;  				break; @@ -660,10 +657,21 @@ restart:  		netconsole_target_put(nt);  	}  	spin_unlock_irqrestore(&target_list_lock, flags); -	if (stopped && (event == NETDEV_UNREGISTER || event == NETDEV_BONDING_DESLAVE)) +	if (stopped) {  		printk(KERN_INFO "netconsole: network logging stopped on " -			"interface %s as it %s\n",  dev->name, -			event == NETDEV_UNREGISTER ? "unregistered" : "released slaves"); +		       "interface %s as it ", dev->name); +		switch (event) { +		case NETDEV_UNREGISTER: +			printk(KERN_CONT "unregistered\n"); +			break; +		case NETDEV_BONDING_DESLAVE: +			printk(KERN_CONT "released slaves\n"); +			break; +		case NETDEV_JOIN: +			printk(KERN_CONT "is joining a master device\n"); +			break; +		} +	}  done:  	return NOTIFY_DONE; diff --git a/include/linux/notifier.h b/include/linux/notifier.h index 621dfa16acc..a577762afbe 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h @@ -211,6 +211,7 @@ static inline int notifier_to_errno(int ret)  #define NETDEV_UNREGISTER_BATCH 0x0011  #define NETDEV_BONDING_DESLAVE  0x0012  #define NETDEV_NOTIFY_PEERS	0x0013 +#define NETDEV_JOIN		0x0014  #define SYS_DOWN	0x0001	/* Notify of system down */  #define SYS_RESTART	SYS_DOWN  |