net: remove rtmsg_ifinfo used in bridge and bonding
Subsystems (4)
v3 cover net: remove rtmsg_ifinfo used in bridge and bonding
It's better to send notifications to userspace by the events in rtnetlink_event, instead of calling rtmsg_ifinfo directly.
This patcheset is to remove rtmsg_ifinfo called in bonding and bridge, the notifications can be handled by NETDEV_CHANGEUPPER and NETDEV_CHANGELOWERSTATE events in rtnetlink_event.
It could also fix some redundant notifications from bonding and bridge.
v1->v2:
- post to net-next.git instead of net.git, for it's more like an improvement for bondingv2->v3:
- add patch 1/4 to remove rtmsg_ifinfo called in add_del_if
Xin Long (4):
bridge: remove rtmsg_ifinfo called in add_del_if
bonding: remove rtmsg_ifinfo called in bond_master_upper_dev_link
rtnetlink: bring NETDEV_CHANGELOWERSTATE event process back to
rtnetlink_event
bonding: remove rtmsg_ifinfo called after bond_lower_state_changed
drivers/net/bonding/bond_main.c | 11 +++-------- include/net/bonding.h | 4 ---- net/bridge/br_ioctl.c | 3 --- net/core/rtnetlink.c | 2 +- 4 files changed, 4 insertions(+), 16 deletions(-)
Signature · 1 line
2.1.0
PATCH v3 1/4 bridge: remove rtmsg_ifinfo called in add_del_if
Since commit dc709f375743 ("rtnetlink: bring NETDEV_CHANGEUPPER event process back in rtnetlink_event"), rtnetlink_event would process the NETDEV_CHANGEUPPER event and send a notification to userspace.
In add_del_if, it would generate NETDEV_CHANGEUPPER event by whether netdev_master_upper_dev_link or netdev_upper_dev_unlink. There's no need to call rtmsg_ifinfo to send the notification any more.
So this patch is to remove it from add_del_if also to avoid redundant notifications.
--- net/bridge/br_ioctl.c | 3 --- 1 file changed, 3 deletions(-)
net/bridge/br_ioctl.c +0 -3
@@ -102,9 +102,6 @@ static int add_del_if(struct net_bridge *br, int ifindex, int isadd)else ret =br_del_if (br, dev); -if (!ret) -rtmsg_ifinfo (RTM_NEWLINK , dev,IFF_MASTER ,GFP_KERNEL ); -return ret; }
Signature · 1 line
2.1.0
PATCH v3 2/4 bonding: remove rtmsg_ifinfo called in bond_master_upper_dev_link
Since commit 42e52bf9e3ae ("net: add netnotifier event for upper device change"), netdev_master_upper_dev_link has generated NETDEV_CHANGEUPPER event which would send a notification to userspace in rtnetlink_event.
There's no need to call rtmsg_ifinfo to send the notification any more. So this patch is to remove it from bond_master_upper_dev_link as well as bond_upper_dev_unlink to avoid the redundant notifications.
--- drivers/net/bonding/bond_main.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-)
drivers/net/bonding/bond_main.c +3 -8
@@ -1221,22 +1221,17 @@ static int bond_master_upper_dev_link(struct bonding *bond, struct slave *slave, struct netlink_ext_ack *extack) {struct netdev_lag_upper_info lag_upper_info; -int err; lag_upper_info.tx_type =bond_lag_tx_type (bond); - err =netdev_master_upper_dev_link (slave->dev, bond->dev, slave, - &lag_upper_info, extack); -if (err) -return err; -rtmsg_ifinfo (RTM_NEWLINK , slave->dev,IFF_SLAVE ,GFP_KERNEL ); -return 0 ; + +return netdev_master_upper_dev_link (slave->dev, bond->dev, slave, + &lag_upper_info, extack); }static void bond_upper_dev_unlink (struct bonding *bond,struct slave *slave) {netdev_upper_dev_unlink (slave->dev, bond->dev); slave->dev->flags &= ~IFF_SLAVE ; -rtmsg_ifinfo (RTM_NEWLINK , slave->dev,IFF_SLAVE ,GFP_KERNEL ); }static struct slave *bond_alloc_slave (struct bonding *bond)
Signature · 1 line
2.1.0
PATCH v3 3/4 rtnetlink: bring NETDEV_CHANGELOWERSTATE event process back to rtnetlink_event
This patch is to bring NETDEV_CHANGELOWERSTATE event process back to rtnetlink_event so that bonding could use it instead of calling rtmsg_ifinfo to send a notification to userspace after netdev lower state is changed in the later patch.
--- net/core/rtnetlink.c | 1 + 1 file changed, 1 insertion(+)
net/core/rtnetlink.c +1 -0
@@ -4385,6 +4385,7 @@ static int rtnetlink_event(struct notifier_block *this, unsigned long event, voicase NETDEV_CHANGEUPPER :case NETDEV_RESEND_IGMP :case NETDEV_CHANGEINFODATA : +case NETDEV_CHANGELOWERSTATE :case NETDEV_CHANGE_TX_QUEUE_LEN :rtmsg_ifinfo_event (RTM_NEWLINK , dev,0 ,rtnl_get_event (event),GFP_KERNEL ,NULL );
Signature · 1 line
2.1.0
PATCH v3 4/4 bonding: remove rtmsg_ifinfo called after bond_lower_state_changed
After the patch 'rtnetlink: bring NETDEV_CHANGELOWERSTATE event process back to rtnetlink_event', bond_lower_state_changed would generate NETDEV_CHANGEUPPER event which would send a notification to userspace in rtnetlink_event.
There's no need to call rtmsg_ifinfo to send the notification any more. So this patch is to remove it from these places after bond_lower_state_changed.
Besides, after this, rtmsg_ifinfo is not needed to be exported.
--- include/net/bonding.h | 4 ---- net/core/rtnetlink.c | 1 - 2 files changed, 5 deletions(-)
include/net/bonding.h +0 -4
@@ -330,7 +330,6 @@ static inline void bond_set_active_slave(struct slave *slave) slave->backup =0 ;bond_queue_slave_event (slave);bond_lower_state_changed (slave); -rtmsg_ifinfo (RTM_NEWLINK , slave->dev,0 ,GFP_ATOMIC ); } }
@@ -340,7 +339,6 @@ static inline void bond_set_backup_slave(struct slave *slave) slave->backup =1 ;bond_queue_slave_event (slave);bond_lower_state_changed (slave); -rtmsg_ifinfo (RTM_NEWLINK , slave->dev,0 ,GFP_ATOMIC ); } }
@@ -353,7 +351,6 @@ static inline void bond_set_slave_state(struct slave *slave, slave->backup = slave_state;if (notify) {bond_lower_state_changed (slave); -rtmsg_ifinfo (RTM_NEWLINK , slave->dev,0 ,GFP_ATOMIC );bond_queue_slave_event (slave); slave->should_notify =0 ; }else {
@@ -385,7 +382,6 @@ static inline void bond_slave_state_notify(struct bonding *bond)bond_for_each_slave (bond, tmp, iter) {if (tmp->should_notify) {bond_lower_state_changed (tmp); -rtmsg_ifinfo (RTM_NEWLINK , tmp->dev,0 ,GFP_ATOMIC ); tmp->should_notify =0 ; } }
net/core/rtnetlink.c +0 -1
@@ -2989,7 +2989,6 @@ void rtmsg_ifinfo(int type, struct net_device *dev, unsigned int change, {rtmsg_ifinfo_event (type, dev, change,rtnl_get_event (0 ), flags,NULL ); } -EXPORT_SYMBOL (rtmsg_ifinfo);void rtmsg_ifinfo_newnet (int type,struct net_device *dev,unsigned int change,gfp_t flags,int *new_nsid)
Signature · 1 line
2.1.0
David Miller
maintainerFrom: Xin Long <[email protected]>
Date: Tue, 24 Oct 2017 13:54:16 +0800
Quoted 7 lines
It's better to send notifications to userspace by the events in
rtnetlink_event, instead of callingrtmsg_ifinfodirectly.This patcheset is to remove
rtmsg_ifinfocalled in bonding and bridge, the notifications can be handled byNETDEV_CHANGEUPPERandNETDEV_CHANGELOWERSTATEevents inrtnetlink_event.
Quoted 8 lines
It could also fix some redundant notifications from bonding and bridge.
v1->v2:
- post to net-next.git instead of net.git, for it's more like an improvement for bondingv2->v3:
- add patch 1/4 to removertmsg_ifinfocalled inadd_del_if
Series applied, thanks.