linux/net/bridge
Neil Horman 2cde6acd49 netpoll: Fix __netpoll_rcu_free so that it can hold the rtnl lock
__netpoll_rcu_free is used to free netpoll structures when the rtnl_lock is
already held.  The mechanism is used to asynchronously call __netpoll_cleanup
outside of the holding of the rtnl_lock, so as to avoid deadlock.
Unfortunately, __netpoll_cleanup modifies pointers (dev->np), which means the
rtnl_lock must be held while calling it.  Further, it cannot be held, because
rcu callbacks may be issued in softirq contexts, which cannot sleep.

Fix this by converting the rcu callback to a work queue that is guaranteed to
get scheduled in process context, so that we can hold the rtnl properly while
calling __netpoll_cleanup

Tested successfully by myself.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: "David S. Miller" <davem@davemloft.net>
CC: Cong Wang <amwang@redhat.com>
CC: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2013-02-11 19:19:33 -05:00
..
netfilter net: remove redundant check for timer pending state before del_timer 2013-02-04 13:26:49 -05:00
br_device.c netpoll: Fix __netpoll_rcu_free so that it can hold the rtnl lock 2013-02-11 19:19:33 -05:00
br_fdb.c netlink: add attributes to fdb interface 2012-10-01 18:39:44 -04:00
br_forward.c netpoll: check netpoll tx status on the right device 2012-08-14 14:33:32 -07:00
br_if.c bridge: remove usage of netdev_set_master() 2013-01-04 13:31:50 -08:00
br_input.c eth: Make is_link_local() consistent with other address tests 2012-11-02 21:34:05 -04:00
br_ioctl.c net: Allow userns root to control the network bridge code. 2012-11-18 20:33:00 -05:00
br_mdb.c netns: bridge: allow unprivileged users add/delete mdb entry 2013-02-04 13:12:16 -05:00
br_multicast.c bridge: Correctly unregister MDB rtnetlink handlers 2013-01-03 01:56:11 -08:00
br_netfilter.c bridge: Pull ip header into skb->data before looking into ip header. 2012-10-10 22:50:45 -04:00
br_netlink.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-01-15 15:05:59 -05:00
br_notify.c bridge: respect RFC2863 operational state 2012-12-30 02:31:43 -08:00
br_private_stp.h net: cleanup unsigned to unsigned int 2012-04-15 12:44:40 -04:00
br_private.h bridge: use dev->addr_assign_type to see if user change mac 2013-02-11 14:16:26 -05:00
br_stp_bpdu.c bridge: implement BPDU blocking 2012-11-14 20:20:44 -05:00
br_stp_if.c bridge: use dev->addr_assign_type to see if user change mac 2013-02-11 14:16:26 -05:00
br_stp_timer.c time: jiffies_delta_to_clock_t() helper to the rescue 2012-08-09 16:17:03 -07:00
br_stp.c bridge: add root port blocking 2012-11-14 20:20:44 -05:00
br_sysfs_br.c net: Allow userns root to control the network bridge code. 2012-11-18 20:33:00 -05:00
br_sysfs_if.c bridge: implement multicast fast leave 2012-12-05 16:24:45 -05:00
br.c net:bridge: use IS_ENABLED 2011-12-16 15:49:52 -05:00
Kconfig net: bridge builtin vs. ipv6 modular 2011-03-10 13:45:57 -08:00
Makefile bridge: export multicast database via netlink 2012-12-07 14:32:52 -05:00