netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
  • [parent not found: <alpine.DEB.2.02.1307191323150.4089@ionos.tec.linutronix.de>]
  • * [PATCH] bridge: do not call setup_timer() multiple times
           [not found] <51E557C0.2060602@linux.vnet.ibm.com>
           [not found] ` <51E8F759.4060202@linux.vnet.ibm.com>
           [not found] ` <alpine.DEB.2.02.1307191323150.4089@ionos.tec.linutronix.de>
    @ 2013-07-20  3:07 ` Eric Dumazet
      2013-07-20  5:13   ` David Miller
      2 siblings, 1 reply; 9+ messages in thread
    From: Eric Dumazet @ 2013-07-20  3:07 UTC (permalink / raw)
      To: Srivatsa S. Bhat, David Miller
      Cc: linux-kernel@vger.kernel.org, Thomas Gleixner, netdev
    
    From: Eric Dumazet <edumazet@google.com>
    
    commit 9f00b2e7cf24 ("bridge: only expire the mdb entry when query is
    received") added a nasty bug as an active timer can be reinitialized.
    
    setup_timer() must be done once, no matter how many time mod_timer()
    is called. br_multicast_new_group() is the right place to do this.
    
    Reported-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    Diagnosed-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Tested-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    Cc: Cong Wang <amwang@redhat.com>
    ---
     net/bridge/br_multicast.c |    5 +++--
     1 file changed, 3 insertions(+), 2 deletions(-)
    
    diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
    index 69af490..4b99c9a 100644
    --- a/net/bridge/br_multicast.c
    +++ b/net/bridge/br_multicast.c
    @@ -619,6 +619,9 @@ rehash:
     	mp->br = br;
     	mp->addr = *group;
     
    +	setup_timer(&mp->timer, br_multicast_group_expired,
    +		    (unsigned long)mp);
    +
     	hlist_add_head_rcu(&mp->hlist[mdb->ver], &mdb->mhash[hash]);
     	mdb->size++;
     
    @@ -1126,7 +1129,6 @@ static int br_ip4_multicast_query(struct net_bridge *br,
     	if (!mp)
     		goto out;
     
    -	setup_timer(&mp->timer, br_multicast_group_expired, (unsigned long)mp);
     	mod_timer(&mp->timer, now + br->multicast_membership_interval);
     	mp->timer_armed = true;
     
    @@ -1204,7 +1206,6 @@ static int br_ip6_multicast_query(struct net_bridge *br,
     	if (!mp)
     		goto out;
     
    -	setup_timer(&mp->timer, br_multicast_group_expired, (unsigned long)mp);
     	mod_timer(&mp->timer, now + br->multicast_membership_interval);
     	mp->timer_armed = true;
     
    
    ^ permalink raw reply related	[flat|nested] 9+ messages in thread

  • end of thread, other threads:[~2013-07-20  5:13 UTC | newest]
    
    Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <51E557C0.2060602@linux.vnet.ibm.com>
         [not found] ` <51E8F759.4060202@linux.vnet.ibm.com>
    2013-07-19  9:08   ` mod_timer: list_add corruption: WARNING: CPU: 1 PID: 0 at lib/list_debug.c:33 __list_add+0xbe/0xd0() Srivatsa S. Bhat
         [not found] ` <alpine.DEB.2.02.1307191323150.4089@ionos.tec.linutronix.de>
    2013-07-19 11:47   ` Srivatsa S. Bhat
    2013-07-19 13:40     ` Thomas Gleixner
    2013-07-19 13:51       ` Eric Dumazet
    2013-07-19 16:38         ` Thomas Gleixner
    2013-07-19 17:26           ` Eric Dumazet
    2013-07-19 18:46             ` Srivatsa S. Bhat
    2013-07-20  3:07 ` [PATCH] bridge: do not call setup_timer() multiple times Eric Dumazet
    2013-07-20  5:13   ` David Miller
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox;
    as well as URLs for NNTP newsgroup(s).