On Mon, 07 Jan 2008 23:11:53 +1100
Herbert Xu <[EMAIL PROTECTED]> wrote:

> Eric Dumazet <[EMAIL PROTECTED]> wrote:
> >  CHECK   net/ipv4/route.c
> > net/ipv4/route.c:298:2: warning: context imbalance in 'rt_cache_get_first' 
> > - wrong count at exit
> > net/ipv4/route.c:307:3: warning: context imbalance in 'rt_cache_get_next' - 
> > unexpected unlock
> > net/ipv4/route.c:346:3: warning: context imbalance in 'rt_cache_seq_stop' - 
> > unexpected unlock
> > 
> > Signed-off-by: Eric Dumazet <[EMAIL PROTECTED]>
> > 
> > diff --git a/net/ipv4/route.c b/net/ipv4/route.c
> > index 10915bb..fec0571 100644
> > --- a/net/ipv4/route.c
> > +++ b/net/ipv4/route.c
> > @@ -289,11 +289,11 @@ static struct rtable *rt_cache_get_first(struct 
> > seq_file *seq)
> >        struct rt_cache_iter_state *st = seq->private;
> > 
> >        for (st->bucket = rt_hash_mask; st->bucket >= 0; --st->bucket) {
> > -               rcu_read_lock_bh();
> >                r = rt_hash_table[st->bucket].chain;
> >                if (r)
> >                        break;
> >                rcu_read_unlock_bh();
> > +               rcu_read_lock_bh();
> 
> If we have to change perfectly working code to silence sparse then
> either sparse or we are doing something wrong.
> 
> This is not the only spot where we conditionally hold the lock.
> There's got to be a better fix than changing all of them to hold
> locks unconditionally.

Maybe sparse (or me :) ) is a litle bit dumb :(

You are right other functions conditionally hold some lock(s), but in this
case this is not really necessary / worth the complexity.

AFAIK, this patch reduces complexity and text size.

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to