Message ID | 1320940083-3719823-1-git-send-email-avagin@openvz.org |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Andrew Vagin <avagin@openvz.org> Date: Thu, 10 Nov 2011 18:48:03 +0300 > multicast_lock is taken in softirq context, so we should use > spin_lock_bh() in userspace. > > call-chain in softirq context: > run_timer_softirq() > br_multicast_query_expired() > > call-chain in userspace: > sysfs_write_file() > store_multicast_snooping() > br_multicast_toggle() > > Signed-off-by: Andrew Vagin <avagin@openvz.org> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 995cbe0..2eefe27 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c @@ -1770,7 +1770,7 @@ int br_multicast_toggle(struct net_bridge *br, unsigned long val) int err = 0; struct net_bridge_mdb_htable *mdb; - spin_lock(&br->multicast_lock); + spin_lock_bh(&br->multicast_lock); if (br->multicast_disabled == !val) goto unlock; @@ -1806,7 +1806,7 @@ rollback: } unlock: - spin_unlock(&br->multicast_lock); + spin_unlock_bh(&br->multicast_lock); return err; }
multicast_lock is taken in softirq context, so we should use spin_lock_bh() in userspace. call-chain in softirq context: run_timer_softirq() br_multicast_query_expired() call-chain in userspace: sysfs_write_file() store_multicast_snooping() br_multicast_toggle() Signed-off-by: Andrew Vagin <avagin@openvz.org> --- net/bridge/br_multicast.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)