[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20130725090140.658f33f7@nehalam.linuxnetplumber.net>
Date: Thu, 25 Jul 2013 09:01:40 -0700
From: Stephen Hemminger <stephen@...workplumber.org>
To: Linus Lüssing <linus.luessing@....de>
Cc: bridge@...ts.linux-foundation.org,
"David S. Miller" <davem@...emloft.net>, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org,
Herbert Xu <herbert@...dor.apana.org.au>,
Cong Wang <amwang@...hat.com>,
Adam Baker <linux@...er-net.org.uk>
Subject: Re: [PATCHv2] bridge: disable snooping if there is no querier
On Thu, 25 Jul 2013 15:56:20 +0200
Linus Lüssing <linus.luessing@....de> wrote:
>
> +static void br_multicast_update_querier_timer(struct net_bridge *br,
> + unsigned long max_delay)
> +{
> + if (!timer_pending(&br->multicast_querier_timer))
> + atomic64_set(&br->multicast_querier_delay_time,
> + jiffies + max_delay);
> +
> + mod_timer(&br->multicast_querier_timer,
> + jiffies + br->multicast_querier_interval);
> +}
> +
Isn't this test racing with timer expiration.
static void br_multicast_update_querier_timer(struct net_bridge *br,
unsigned long max_delay)
{
if (!timer_pending(&br->multicast_querier_timer))
atomic64_set(&br->multicast_querier_delay_time,
jiffies + max_delay);
What if timer completes here?
mod_timer(&br->multicast_querier_timer,
jiffies + br->multicast_querier_interval);
}
And another race if timer goes off?
static void br_multicast_update_querier_timer(struct net_bridge *br,
unsigned long max_delay)
{
if (!timer_pending(&br->multicast_querier_timer))
atomic64_set(&br->multicast_querier_delay_time,
jiffies + max_delay);
Timer fires here...?
mod_timer(&br->multicast_querier_timer,
jiffies + br->multicast_querier_interval);
}
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists