Skip to content

Commit c7e8e8a

Browse files
Cong Wangdavem330
Cong Wang
authored andcommittedJul 7, 2013
bridge: fix some kernel warning in multicast timer
Several people reported the warning: "kernel BUG at kernel/timer.c:729!" and the stack trace is: #7 [ffff880214d25c10] mod_timer+501 at ffffffff8106d905 #8 [ffff880214d25c50] br_multicast_del_pg.isra.20+261 at ffffffffa0731d25 [bridge] #9 [ffff880214d25c80] br_multicast_disable_port+88 at ffffffffa0732948 [bridge] #10 [ffff880214d25cb0] br_stp_disable_port+154 at ffffffffa072bcca [bridge] #11 [ffff880214d25ce8] br_device_event+520 at ffffffffa072a4e8 [bridge] #12 [ffff880214d25d18] notifier_call_chain+76 at ffffffff8164aafc #13 [ffff880214d25d50] raw_notifier_call_chain+22 at ffffffff810858f6 #14 [ffff880214d25d60] call_netdevice_notifiers+45 at ffffffff81536aad #15 [ffff880214d25d80] dev_close_many+183 at ffffffff81536d17 #16 [ffff880214d25dc0] rollback_registered_many+168 at ffffffff81537f68 #17 [ffff880214d25de8] rollback_registered+49 at ffffffff81538101 #18 [ffff880214d25e10] unregister_netdevice_queue+72 at ffffffff815390d8 #19 [ffff880214d25e30] __tun_detach+272 at ffffffffa074c2f0 [tun] #20 [ffff880214d25e88] tun_chr_close+45 at ffffffffa074c4bd [tun] #21 [ffff880214d25ea8] __fput+225 at ffffffff8119b1f1 #22 [ffff880214d25ef0] ____fput+14 at ffffffff8119b3fe #23 [ffff880214d25f00] task_work_run+159 at ffffffff8107cf7f #24 [ffff880214d25f30] do_notify_resume+97 at ffffffff810139e1 #25 [ffff880214d25f50] int_signal+18 at ffffffff8164f292 this is due to I forgot to check if mp->timer is armed in br_multicast_del_pg(). This bug is introduced by commit 9f00b2e (bridge: only expire the mdb entry when query is received). Same for __br_mdb_del(). Tested-by: poma <pomidorabelisima@gmail.com> Reported-by: LiYonghua <809674045@qq.com> Reported-by: Robert Hancock <hancockrwd@gmail.com> Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: Stephen Hemminger <stephen@networkplumber.org> Cc: "David S. Miller" <davem@davemloft.net> Signed-off-by: Cong Wang <amwang@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 734d4e1 commit c7e8e8a

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed
 

‎net/bridge/br_mdb.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ static int __br_mdb_del(struct net_bridge *br, struct br_mdb_entry *entry)
447447
call_rcu_bh(&p->rcu, br_multicast_free_pg);
448448
err = 0;
449449

450-
if (!mp->ports && !mp->mglist &&
450+
if (!mp->ports && !mp->mglist && mp->timer_armed &&
451451
netif_running(br->dev))
452452
mod_timer(&mp->timer, jiffies);
453453
break;

‎net/bridge/br_multicast.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ static void br_multicast_del_pg(struct net_bridge *br,
270270
del_timer(&p->timer);
271271
call_rcu_bh(&p->rcu, br_multicast_free_pg);
272272

273-
if (!mp->ports && !mp->mglist &&
273+
if (!mp->ports && !mp->mglist && mp->timer_armed &&
274274
netif_running(br->dev))
275275
mod_timer(&mp->timer, jiffies);
276276

0 commit comments

Comments
 (0)
Please sign in to comment.