diff mbox

[net-next,05/10] net: vrf: Set slave's private flag before linking

Message ID 1489390713-2634-5-git-send-email-jiri@resnulli.us
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

Jiri Pirko March 13, 2017, 7:38 a.m. UTC
From: Ido Schimmel <idosch@mellanox.com>

Allow listeners of the subsequent CHANGEUPPER notification to retrieve
the VRF's table ID by calling l3mdev_fib_table() with the slave netdev.
Without this change, the netdev won't be considered an L3 slave and the
function would return 0.

This is consistent with other master device such as bridge and bond that
set the slave's private flag before linking. It also makes
do_vrf_{add,del}_slave() symmetric.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
 drivers/net/vrf.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

David Ahern March 13, 2017, 3:19 p.m. UTC | #1
On 3/13/17 1:38 AM, Jiri Pirko wrote:
> From: Ido Schimmel <idosch@mellanox.com>
> 
> Allow listeners of the subsequent CHANGEUPPER notification to retrieve
> the VRF's table ID by calling l3mdev_fib_table() with the slave netdev.
> Without this change, the netdev won't be considered an L3 slave and the
> function would return 0.
> 
> This is consistent with other master device such as bridge and bond that
> set the slave's private flag before linking. It also makes
> do_vrf_{add,del}_slave() symmetric.
> 
> Signed-off-by: Ido Schimmel <idosch@mellanox.com>
> Signed-off-by: Jiri Pirko <jiri@mellanox.com>
> ---
>  drivers/net/vrf.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 


Acked-by: David Ahern <dsa@cumulusnetworks.com>
diff mbox

Patch

diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index 5c9a98e..8151ec2 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -746,14 +746,18 @@  static int do_vrf_add_slave(struct net_device *dev, struct net_device *port_dev)
 {
 	int ret;
 
+	port_dev->priv_flags |= IFF_L3MDEV_SLAVE;
 	ret = netdev_master_upper_dev_link(port_dev, dev, NULL, NULL);
 	if (ret < 0)
-		return ret;
+		goto err;
 
-	port_dev->priv_flags |= IFF_L3MDEV_SLAVE;
 	cycle_netdev(port_dev);
 
 	return 0;
+
+err:
+	port_dev->priv_flags &= ~IFF_L3MDEV_SLAVE;
+	return ret;
 }
 
 static int vrf_add_slave(struct net_device *dev, struct net_device *port_dev)