mirror of https://gitee.com/openkylin/linux.git
Merge branch 'rtnetlink-dev-notification-fixes'
Xin Long says: ==================== rtnetlink: a bunch of fixes for userspace notifications in changing dev properties Whenever any property of a link, address, route, etc. changes by whatever way, kernel should notify the programs that listen for such events in userspace. The patchet "rtnetlink: Cleanup user notifications for netdev events" tried to fix a redundant notifications issue, but it also introduced a side effect. After that, user notifications could only be sent when changing dev properties via netlink api. As it removed some events process in rtnetlink_event where the notifications was sent to users. It resulted in no notification generated when dev properties are changed via other ways, like ioctl, sysfs, etc. It may cause some user programs doesn't work as expected because of the missing notifications. This patchset will fix it by bringing some of these netdev events back and also fix the old redundant notifications issue with a proper way. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
2fd7c5abb8
|
@ -2093,7 +2093,7 @@ static int do_setlink(const struct sk_buff *skb,
|
|||
dev->tx_queue_len = orig_len;
|
||||
goto errout;
|
||||
}
|
||||
status |= DO_SETLINK_NOTIFY;
|
||||
status |= DO_SETLINK_MODIFIED;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2248,7 +2248,7 @@ static int do_setlink(const struct sk_buff *skb,
|
|||
|
||||
errout:
|
||||
if (status & DO_SETLINK_MODIFIED) {
|
||||
if (status & DO_SETLINK_NOTIFY)
|
||||
if ((status & DO_SETLINK_NOTIFY) == DO_SETLINK_NOTIFY)
|
||||
netdev_state_change(dev);
|
||||
|
||||
if (err < 0)
|
||||
|
@ -4279,13 +4279,17 @@ static int rtnetlink_event(struct notifier_block *this, unsigned long event, voi
|
|||
|
||||
switch (event) {
|
||||
case NETDEV_REBOOT:
|
||||
case NETDEV_CHANGEMTU:
|
||||
case NETDEV_CHANGEADDR:
|
||||
case NETDEV_CHANGENAME:
|
||||
case NETDEV_FEAT_CHANGE:
|
||||
case NETDEV_BONDING_FAILOVER:
|
||||
case NETDEV_POST_TYPE_CHANGE:
|
||||
case NETDEV_NOTIFY_PEERS:
|
||||
case NETDEV_CHANGEUPPER:
|
||||
case NETDEV_RESEND_IGMP:
|
||||
case NETDEV_CHANGEINFODATA:
|
||||
case NETDEV_CHANGE_TX_QUEUE_LEN:
|
||||
rtmsg_ifinfo_event(RTM_NEWLINK, dev, 0, rtnl_get_event(event),
|
||||
GFP_KERNEL);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue