Re: [PATCH v3 net 1/5] ipv6: Refactor common ip6gre_tunnel_init codes
flat view
From: David Miller <davem@davemloft.net>
Date: 2015-09-11 22:31:02
From: Martin KaFai Lau <redacted> Date: Fri, 11 Sep 2015 11:06:17 -0700
quoted hunk ↗ jump to hunk
@@ -1460,19 +1474,16 @@ static void ip6gre_netlink_parms(struct nlattr *data[], static int ip6gre_tap_init(struct net_device *dev) { struct ip6_tnl *tunnel; + int ret; - tunnel = netdev_priv(dev); + ret = ip6gre_tunnel_init_common(dev); + if (ret) + return ret; - tunnel->dev = dev; - tunnel->net = dev_net(dev); - strcpy(tunnel->parms.name, dev->name); + tunnel = netdev_priv(dev); ip6gre_tnl_link_config(tunnel, 1); - dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); - if (!dev->tstats) - return -ENOMEM; - return 0; }
Is this really equivalent? The existing code for GRE tap device initialization would use whatever ether_setup() left in the broadcast address, it would leave dev->dev_addr alone, and unconditionally use eth_header_ops. You are changing behavior here, and it's been like this has been this way long enough that I can't see clearly whether this is a valid change or not. It probably is not. Either way, even if it is valid, you have to document what is happening here and why it's ok.