Message ID | 645c0bde19cffebb0dc603872ef6ab45e9fbf0b6.1527519997.git.petrm@mellanox.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
Series | net: bridge: Notify about bridge VLANs | expand |
On Mon, May 28, 2018 at 05:11:04PM +0200, Petr Machata wrote: > @@ -580,6 +591,9 @@ int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags, bool *changed) > vg->num_vlans++; > *changed = true; > } > + ret = br_switchdev_port_vlan_add(br->dev, vid, flags); > + if (ret && ret != -EOPNOTSUPP) > + return ret; We should probably do some error handling instead of returning directly? > if (__vlan_add_flags(vlan, flags)) > *changed = true; > regards, dan caprenter
Dan Carpenter <dan.carpenter@oracle.com> writes: > On Mon, May 28, 2018 at 05:11:04PM +0200, Petr Machata wrote: >> @@ -580,6 +591,9 @@ int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags, bool *changed) >> vg->num_vlans++; >> *changed = true; >> } >> + ret = br_switchdev_port_vlan_add(br->dev, vid, flags); >> + if (ret && ret != -EOPNOTSUPP) >> + return ret; > > We should probably do some error handling instead of returning directly? I missed that, you are right. There's a bunch of mutations in the block above. Thanks, Petr
diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c index 8ad5756..b15ef3f 100644 --- a/net/bridge/br_vlan.c +++ b/net/bridge/br_vlan.c @@ -243,6 +243,10 @@ static int __vlan_add(struct net_bridge_vlan *v, u16 flags) goto out_filt; v->brvlan = masterv; v->stats = masterv->stats; + } else { + err = br_switchdev_port_vlan_add(dev, v->vid, flags); + if (err && err != -EOPNOTSUPP) + goto out; } /* Add the dev mac and count the vlan only if it's usable */ @@ -278,6 +282,8 @@ static int __vlan_add(struct net_bridge_vlan *v, u16 flags) br_vlan_put_master(masterv); v->brvlan = NULL; } + } else { + br_switchdev_port_vlan_del(dev, v->vid); } goto out; @@ -303,6 +309,11 @@ static int __vlan_del(struct net_bridge_vlan *v) err = __vlan_vid_del(p->dev, p->br, v->vid); if (err) goto out; + } else { + err = br_switchdev_port_vlan_del(v->br->dev, v->vid); + if (err && err != -EOPNOTSUPP) + goto out; + err = 0; } if (br_vlan_should_use(v)) { @@ -580,6 +591,9 @@ int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags, bool *changed) vg->num_vlans++; *changed = true; } + ret = br_switchdev_port_vlan_add(br->dev, vid, flags); + if (ret && ret != -EOPNOTSUPP) + return ret; if (__vlan_add_flags(vlan, flags)) *changed = true;