diff options
author | Amerigo Wang <amwang@redhat.com> | 2012-08-09 21:24:38 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-08-14 17:33:30 -0400 |
commit | 38e6bc185d9544dfad1774b3f8902a0b061aea25 (patch) | |
tree | 5dc41a28f9dc48095c998dfc0dcf8b970db6e1b5 /net/8021q | |
parent | 47be03a28cc6c80e3aa2b3e8ed6d960ff0c5c0af (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.c | 6 |
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 | ||