aboutsummaryrefslogtreecommitdiffstats
path: root/net/8021q
diff options
context:
space:
mode:
authorAmerigo Wang <amwang@redhat.com>2012-08-09 21:24:38 -0400
committerDavid S. Miller <davem@davemloft.net>2012-08-14 17:33:30 -0400
commit38e6bc185d9544dfad1774b3f8902a0b061aea25 (patch)
tree5dc41a28f9dc48095c998dfc0dcf8b970db6e1b5 /net/8021q
parent47be03a28cc6c80e3aa2b3e8ed6d960ff0c5c0af (diff)
netpoll: make __netpoll_cleanup non-block
Like the previous patch, slave_disable_netpoll() and __netpoll_cleanup() may be called with read_lock() held too, so we should make them non-block, by moving the cleanup and kfree() to call_rcu_bh() callbacks. Cc: "David S. Miller" <davem@davemloft.net> Signed-off-by: Cong Wang <amwang@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/8021q')
-rw-r--r--net/8021q/vlan_dev.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index ee4ae0944cef..b65623f90660 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -704,11 +704,7 @@ static void vlan_dev_netpoll_cleanup(struct net_device *dev)
704 704
705 info->netpoll = NULL; 705 info->netpoll = NULL;
706 706
707 /* Wait for transmitting packets to finish before freeing. */ 707 __netpoll_free_rcu(netpoll);
708 synchronize_rcu_bh();
709
710 __netpoll_cleanup(netpoll);
711 kfree(netpoll);
712} 708}
713#endif /* CONFIG_NET_POLL_CONTROLLER */ 709#endif /* CONFIG_NET_POLL_CONTROLLER */
714 710