return ret;
 }
 
-static int nla_put_iflink(struct sk_buff *skb, const struct net_device *dev)
+static int nla_put_iflink(struct sk_buff *skb, const struct net_device *dev,
+                         bool force)
 {
        int ifindex = dev_get_iflink(dev);
 
-       if (dev->ifindex == ifindex)
-               return 0;
+       if (force || dev->ifindex != ifindex)
+               return nla_put_u32(skb, IFLA_LINK, ifindex);
 
-       return nla_put_u32(skb, IFLA_LINK, ifindex);
+       return 0;
 }
 
 static noinline_for_stack int nla_put_ifalias(struct sk_buff *skb,
                                  const struct net_device *dev,
                                  struct net *src_net)
 {
+       bool put_iflink = false;
+
        if (dev->rtnl_link_ops && dev->rtnl_link_ops->get_link_net) {
                struct net *link_net = dev->rtnl_link_ops->get_link_net(dev);
 
 
                        if (nla_put_s32(skb, IFLA_LINK_NETNSID, id))
                                return -EMSGSIZE;
+
+                       put_iflink = true;
                }
        }
 
-       return 0;
+       return nla_put_iflink(skb, dev, put_iflink);
 }
 
 static int rtnl_fill_link_af(struct sk_buff *skb,
 #ifdef CONFIG_RPS
            nla_put_u32(skb, IFLA_NUM_RX_QUEUES, dev->num_rx_queues) ||
 #endif
-           nla_put_iflink(skb, dev) ||
            put_master_ifindex(skb, dev) ||
            nla_put_u8(skb, IFLA_CARRIER, netif_carrier_ok(dev)) ||
            (dev->qdisc &&