From 071493e9c37718396d98dc3392c7017fe181ef74 Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Tue, 22 May 2007 17:00:01 -0700 Subject: [PATCH] --- yaml --- r: 56854 b: refs/heads/master c: 83b496e928dbd38104bfb107230cc88751b09d89 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/core/rtnetlink.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 7ea43ea80f9b..5aad9950839c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1f8481d19af005c469ee50cf972486240905585e +refs/heads/master: 83b496e928dbd38104bfb107230cc88751b09d89 diff --git a/trunk/net/core/rtnetlink.c b/trunk/net/core/rtnetlink.c index 8c971a2efe2a..1a6c5b9d41b6 100644 --- a/trunk/net/core/rtnetlink.c +++ b/trunk/net/core/rtnetlink.c @@ -689,8 +689,15 @@ static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) } - if (ifm->ifi_flags) - dev_change_flags(dev, ifm->ifi_flags); + if (ifm->ifi_flags || ifm->ifi_change) { + unsigned int flags = ifm->ifi_flags; + + /* bugwards compatibility: ifi_change == 0 is treated as ~0 */ + if (ifm->ifi_change) + flags = (flags & ifm->ifi_change) | + (dev->flags & ~ifm->ifi_change); + dev_change_flags(dev, flags); + } if (tb[IFLA_TXQLEN]) dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);