diff options
-rw-r--r-- | net/dsa/port.c | 2 | ||||
-rw-r--r-- | net/dsa/slave.c | 3 |
2 files changed, 2 insertions, 3 deletions
diff --git a/net/dsa/port.c b/net/dsa/port.c index bf671306b560..c0e630f7f0bd 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -380,6 +380,8 @@ void dsa_port_pre_bridge_leave(struct dsa_port *dp, struct net_device *br) switchdev_bridge_port_unoffload(brport_dev, dp, &dsa_slave_switchdev_notifier, &dsa_slave_switchdev_blocking_notifier); + + dsa_flush_workqueue(); } void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index adcfb2cb4e61..dbda0e0fbffa 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -2448,7 +2448,6 @@ static void dsa_slave_switchdev_event_work(struct work_struct *work) break; } - dev_put(switchdev_work->dev); kfree(switchdev_work); } @@ -2521,8 +2520,6 @@ static int dsa_slave_fdb_event(struct net_device *dev, switchdev_work->vid = fdb_info->vid; switchdev_work->host_addr = host_addr; - /* Hold a reference for dsa_fdb_offload_notify */ - dev_hold(dev); dsa_schedule_work(&switchdev_work->work); return 0; |