diff options
author | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2014-11-11 11:36:43 +0100 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2014-11-11 11:37:35 +0100 |
commit | 47a09af68ba50695c46511b8ed7f036d249bba48 (patch) | |
tree | 051c4b70501a9f360729ecc9a9493a2f8ba33b6f /drivers/net/macvlan.c | |
parent | [media] cx24110: Simplify error handling at cx24110_set_fec() (diff) | |
parent | Linux 3.18-rc4 (diff) | |
download | linux-47a09af68ba50695c46511b8ed7f036d249bba48.tar.xz linux-47a09af68ba50695c46511b8ed7f036d249bba48.zip |
Merge tag 'v3.18-rc4' into patchwork
Needed due to some important regression fixes at RC core.
* commit 'v3.18-rc4': (587 commits)
Linux 3.18-rc4
ARM: dts: zynq: Enable PL clocks for Parallella
tiny: rename ENABLE_DEV_COREDUMP to ALLOW_DEV_COREDUMP
tiny: reverse logic for DISABLE_DEV_COREDUMP
i2c: core: Dispose OF IRQ mapping at client removal time
i2c: at91: don't account as iowait
i2c: remove FSF address
USB: Update default usb-storage delay_use value in kernel-parameters.txt
sysfs: driver core: Fix glue dir race condition by gdp_mutex
MIPS: Fix build with binutils 2.24.51+
xfs: track bulkstat progress by agino
xfs: bulkstat error handling is broken
xfs: bulkstat main loop logic is a mess
xfs: bulkstat chunk-formatter has issues
xfs: bulkstat chunk formatting cursor is broken
xfs: bulkstat btree walk doesn't terminate
mm: Fix comment before truncate_setsize()
USB: cdc-acm: add quirk for control-line state requests
tty: Fix pty master poll() after slave closes v2
MIPS: R3000: Fix debug output for Virtual page number
...
Conflicts:
drivers/media/rc/rc-main.c
Diffstat (limited to 'drivers/net/macvlan.c')
-rw-r--r-- | drivers/net/macvlan.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 29b3bb410781..bfb0b6ec8c56 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -272,7 +272,7 @@ static void macvlan_process_broadcast(struct work_struct *w) struct sk_buff *skb; struct sk_buff_head list; - skb_queue_head_init(&list); + __skb_queue_head_init(&list); spin_lock_bh(&port->bc_queue.lock); skb_queue_splice_tail_init(&port->bc_queue, &list); @@ -1082,9 +1082,15 @@ static void macvlan_port_destroy(struct net_device *dev) { struct macvlan_port *port = macvlan_port_get_rtnl(dev); - cancel_work_sync(&port->bc_work); dev->priv_flags &= ~IFF_MACVLAN_PORT; netdev_rx_handler_unregister(dev); + + /* After this point, no packet can schedule bc_work anymore, + * but we need to cancel it and purge left skbs if any. + */ + cancel_work_sync(&port->bc_work); + __skb_queue_purge(&port->bc_queue); + kfree_rcu(port, rcu); } |