Message ID | 20190506155423.30522-2-nivedita.singhvi@canonical.com |
---|---|
State | New |
Headers | show |
Series | geneve: Can't create geneve tunnels when ipv6 disabled dynamically | expand |
On 5/6/19 5:54 PM, Nivedita Singhvi wrote: > From: Jiri Benc <jbenc@redhat.com> > > BugLink: https://bugs.launchpad.net/bugs/1794232 > > When IPv6 is compiled but disabled at runtime, geneve_sock_add returns > -EAFNOSUPPORT. For metadata based tunnels, this causes failure of the whole > operation of bringing up the tunnel. > > Ignore failure of IPv6 socket creation for metadata based tunnels caused by > IPv6 not being available. > > This is the same fix as what commit d074bf960044 ("vxlan: correctly handle > ipv6.disable module parameter") is doing for vxlan. > > Note there's also commit c0a47e44c098 ("geneve: should not call rt6_lookup() > when ipv6 was disabled") which fixes a similar issue but for regular > tunnels, while this patch is needed for metadata based tunnels. > > Signed-off-by: Jiri Benc <jbenc@redhat.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > (cherry picked from commit cf1c9ccba7308e48a68fa77f476287d9d614e4c7) > Signed-off-by: Nivedita Singhvi <nivedita.singhvi@canonical.com> Hi Nivedita, The patch itself looks good. Clean cherry-picked, tested and affects a single driver. However, the subject of the email doesn't match the title of the commit message. From the mainline git repo, the commit cf1c9ccba730 is named "geneve: correctly handle ipv6.disable module parameter" instead of "geneve: Can't create geneve tunnels when ipv6 disabled dynamically". Could you please re-send the patch with the fixed title? Thank you, Kleber > --- > drivers/net/geneve.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c > index 8bb5bd72342a..62e62cab6739 100644 > --- a/drivers/net/geneve.c > +++ b/drivers/net/geneve.c > @@ -632,15 +632,20 @@ static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6) > static int geneve_open(struct net_device *dev) > { > struct geneve_dev *geneve = netdev_priv(dev); > - bool ipv6 = !!(geneve->info.mode & IP_TUNNEL_INFO_IPV6); > bool metadata = geneve->collect_md; > + bool ipv4, ipv6; > int ret = 0; > > + ipv6 = geneve->info.mode & IP_TUNNEL_INFO_IPV6 || metadata; > + ipv4 = !ipv6 || metadata; > #if IS_ENABLED(CONFIG_IPV6) > - if (ipv6 || metadata) > + if (ipv6) { > ret = geneve_sock_add(geneve, true); > + if (ret < 0 && ret != -EAFNOSUPPORT) > + ipv4 = false; > + } > #endif > - if (!ret && (!ipv6 || metadata)) > + if (ipv4) > ret = geneve_sock_add(geneve, false); > if (ret < 0) > geneve_sock_release(geneve); >
On 5/7/19 4:11 PM, Kleber Souza wrote: > On 5/6/19 5:54 PM, Nivedita Singhvi wrote: >> From: Jiri Benc <jbenc@redhat.com> >> >> BugLink: https://bugs.launchpad.net/bugs/1794232 >> >> When IPv6 is compiled but disabled at runtime, geneve_sock_add returns >> -EAFNOSUPPORT. For metadata based tunnels, this causes failure of the whole >> operation of bringing up the tunnel. >> >> Ignore failure of IPv6 socket creation for metadata based tunnels caused by >> IPv6 not being available. >> >> This is the same fix as what commit d074bf960044 ("vxlan: correctly handle >> ipv6.disable module parameter") is doing for vxlan. >> >> Note there's also commit c0a47e44c098 ("geneve: should not call rt6_lookup() >> when ipv6 was disabled") which fixes a similar issue but for regular >> tunnels, while this patch is needed for metadata based tunnels. >> >> Signed-off-by: Jiri Benc <jbenc@redhat.com> >> Signed-off-by: David S. Miller <davem@davemloft.net> >> (cherry picked from commit cf1c9ccba7308e48a68fa77f476287d9d614e4c7) >> Signed-off-by: Nivedita Singhvi <nivedita.singhvi@canonical.com> > > Hi Nivedita, > > The patch itself looks good. Clean cherry-picked, tested and affects a single > driver. However, the subject of the email doesn't match the title of the > commit message. From the mainline git repo, the commit cf1c9ccba730 is > named "geneve: correctly handle ipv6.disable module parameter" instead of > "geneve: Can't create geneve tunnels when ipv6 disabled dynamically". > > Could you please re-send the patch with the fixed title? Hi Kleber, Sure. Sending separately. Nivedita
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index 8bb5bd72342a..62e62cab6739 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c @@ -632,15 +632,20 @@ static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6) static int geneve_open(struct net_device *dev) { struct geneve_dev *geneve = netdev_priv(dev); - bool ipv6 = !!(geneve->info.mode & IP_TUNNEL_INFO_IPV6); bool metadata = geneve->collect_md; + bool ipv4, ipv6; int ret = 0; + ipv6 = geneve->info.mode & IP_TUNNEL_INFO_IPV6 || metadata; + ipv4 = !ipv6 || metadata; #if IS_ENABLED(CONFIG_IPV6) - if (ipv6 || metadata) + if (ipv6) { ret = geneve_sock_add(geneve, true); + if (ret < 0 && ret != -EAFNOSUPPORT) + ipv4 = false; + } #endif - if (!ret && (!ipv6 || metadata)) + if (ipv4) ret = geneve_sock_add(geneve, false); if (ret < 0) geneve_sock_release(geneve);