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