diff options
author | Amerigo Wang <amwang@redhat.com> | 2012-08-10 01:24:38 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-08-14 14:33:30 -0700 |
commit | 38e6bc185d9544dfad1774b3f8902a0b061aea25 (patch) | |
tree | 5dc41a28f9dc48095c998dfc0dcf8b970db6e1b5 /net/bridge | |
parent | 47be03a28cc6c80e3aa2b3e8ed6d960ff0c5c0af (diff) | |
download | op-kernel-dev-38e6bc185d9544dfad1774b3f8902a0b061aea25.zip op-kernel-dev-38e6bc185d9544dfad1774b3f8902a0b061aea25.tar.gz |
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/bridge')
-rw-r--r-- | net/bridge/br_device.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index ed0e0f9..f41ba40 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@ -267,11 +267,7 @@ void br_netpoll_disable(struct net_bridge_port *p) p->np = NULL; - /* Wait for transmitting packets to finish before freeing. */ - synchronize_rcu_bh(); - - __netpoll_cleanup(np); - kfree(np); + __netpoll_free_rcu(np); } #endif |