switchdev: fix: erasing too much of vlan obj when handling multiple vlan specs
Subsystems (3)
PATCH v4 1/2 switchdev: fix: erasing too much of vlan obj when handling multiple vlan specs
From: Scott Feldman <[email protected]>
When adding vlans with multiple IFLA_BRIDGE_VLAN_INFO attrs set in AFSPEC, we would wipe the vlan obj struct after the first IFLA_BRIDGE_VLAN_INFO. Fix this by only clearing what's necessary on each IFLA_BRIDGE_VLAN_INFO iteration.
---v3->v4: rebase syncv2->v3: no changev1->v2: add Jiri's Acked-by
net/switchdev/switchdev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/switchdev/switchdev.c +2 -2
@@ -866,7 +866,7 @@ static int switchdev_port_br_afspec(struct net_device *dev, err =f (dev, &vlan.obj);if (err)return err; -memset (&vlan,0 ,sizeof (vlan)); + vlan.vid_begin =0 ; }else {if (vlan.vid_begin)return -EINVAL ;
@@ -875,7 +875,7 @@ static int switchdev_port_br_afspec(struct net_device *dev, err =f (dev, &vlan.obj);if (err)return err; -memset (&vlan,0 ,sizeof (vlan)); + vlan.vid_begin =0 ; } }
Signature · 1 line
1.7.10.4
PATCH v4 2/2 switchdev: fix: pass correct obj size when deferring obj add
From: Scott Feldman <[email protected]>
---v3->v4: rebase syncv2->v3: add Jiri's Acked-byv1->v2: use correct "Fixes" tag, use common func to calc obj size for add/del
net/switchdev/switchdev.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-)
net/switchdev/switchdev.c +17 -2
@@ -337,6 +337,21 @@ int switchdev_port_attr_set(struct net_device *dev, }EXPORT_SYMBOL_GPL (switchdev_port_attr_set); +static size_t switchdev_obj_size (const struct switchdev_obj *obj) +{ +switch (obj->id) { +case SWITCHDEV_OBJ_ID_PORT_VLAN : +return sizeof (struct switchdev_obj_port_vlan ); +case SWITCHDEV_OBJ_ID_IPV4_FIB : +return sizeof (struct switchdev_obj_ipv4_fib ); +case SWITCHDEV_OBJ_ID_PORT_FDB : +return sizeof (struct switchdev_obj_port_fdb ); +default : +BUG (); + } +return 0 ; +} +static int __switchdev_port_obj_add (struct net_device *dev,const struct switchdev_obj *obj,struct switchdev_trans *trans)
@@ -422,7 +437,7 @@ static void switchdev_port_obj_add_deferred(struct net_device *dev,static int switchdev_port_obj_add_defer (struct net_device *dev,const struct switchdev_obj *obj) { -return switchdev_deferred_enqueue (dev, obj,sizeof (*obj), +return switchdev_deferred_enqueue (dev, obj,switchdev_obj_size (obj), switchdev_port_obj_add_deferred); }
@@ -490,7 +505,7 @@ static void switchdev_port_obj_del_deferred(struct net_device *dev,static int switchdev_port_obj_del_defer (struct net_device *dev,const struct switchdev_obj *obj) { -return switchdev_deferred_enqueue (dev, obj,sizeof (*obj), +return switchdev_deferred_enqueue (dev, obj,switchdev_obj_size (obj), switchdev_port_obj_del_deferred); }
Signature · 1 line
1.7.10.4
Re: [PATCH net-next v4 2/2] switchdev: fix: pass correct obj size when deferring obj add
From: [email protected]
Date: Wed, 28 Oct 2015 23:17:31 -0700
Quoted 5 lines
From: Scott Feldman <[email protected]>
Fixes 4d429c5dd ("switchdev: introduce possibility to defer obj_add/del")Signed-off-by Scott Feldman <[email protected]>Acked-by Jiri Pirko <[email protected]>
Applied.
From: [email protected]
Date: Wed, 28 Oct 2015 23:17:30 -0700
Quoted 10 lines
From: Scott Feldman <[email protected]>
When adding vlans with multiple
IFLA_BRIDGE_VLAN_INFOattrs set in AFSPEC, we would wipe the vlan obj struct after the firstIFLA_BRIDGE_VLAN_INFO. Fix this by only clearing what's necessary on eachIFLA_BRIDGE_VLAN_INFOiteration.Fixes 9e8f4a54 ("switchdev: push object ID back to object structure")Signed-off-by Scott Feldman <[email protected]>Acked-by Jiri Pirko <[email protected]>
Applied.