On Mon, Oct 12, 2015 at 11:05 PM, Jiri Pirko <j...@resnulli.us> wrote: > Tue, Oct 13, 2015 at 05:28:20AM CEST, sfel...@gmail.com wrote: >>On Mon, Oct 12, 2015 at 11:03 AM, Jiri Pirko <j...@resnulli.us> wrote: >>> From: Jiri Pirko <j...@mellanox.com> >>> >>> Since spinlock is held here, defer the switchdev operation. >>> >>> Signed-off-by: Jiri Pirko <j...@mellanox.com> >>> --- >>> net/bridge/br_fdb.c | 5 ++++- >>> net/bridge/br_if.c | 3 +++ >>> 2 files changed, 7 insertions(+), 1 deletion(-) >>> >>> diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c >>> index f5e7da0..c88bd8e 100644 >>> --- a/net/bridge/br_fdb.c >>> +++ b/net/bridge/br_fdb.c >>> @@ -134,7 +134,10 @@ static void fdb_del_hw_addr(struct net_bridge *br, >>> const unsigned char *addr) >>> static void fdb_del_external_learn(struct net_bridge_fdb_entry *f) >>> { >>> struct switchdev_obj_port_fdb fdb = { >>> - .obj.id = SWITCHDEV_OBJ_ID_PORT_FDB, >>> + .obj = { >>> + .id = SWITCHDEV_OBJ_ID_PORT_FDB, >>> + .flags = SWITCHDEV_F_DEFER, >>> + }, >>> .vid = f->vlan_id, >>> }; >>> >>> diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c >>> index 934cae9..09147cb 100644 >>> --- a/net/bridge/br_if.c >>> +++ b/net/bridge/br_if.c >>> @@ -24,6 +24,7 @@ >>> #include <linux/slab.h> >>> #include <net/sock.h> >>> #include <linux/if_vlan.h> >>> +#include <net/switchdev.h> >>> >>> #include "br_private.h" >>> >>> @@ -249,6 +250,8 @@ static void del_nbp(struct net_bridge_port *p) >>> list_del_rcu(&p->list); >>> >>> br_fdb_delete_by_port(br, p, 0, 1); >>> + switchdev_flush_deferred(); >>> + >> >>This potentially flushes other (valid) work on the deferred queue not >>related to FDB del. > > flush_deferred is implemented by flush_workqueue. This enforces the > workqueue to be processed heve and sleeps until it is done. Nothing is > lost.
My bad, I saw "flush" and assumed everything went down the toilet. Acked-by: Scott Feldman <sfel...@gmail.com> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html