Message ID | 1281990130.2487.70.camel@edumazet-laptop |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Mon, 16 Aug 2010 22:22:10 +0200 > [PATCH] netfilter: {ip,ip6,arp}_tables: avoid lockdep false positive > > After commit 24b36f019 (netfilter: {ip,ip6,arp}_tables: dont block > bottom half more than necessary), lockdep can raise a warning > because we attempt to lock a spinlock with BH enabled, while > the same lock is usually locked by another cpu in a softirq context. > > Disable again BH to avoid these lockdep warnings. > > Reported-by: Linus Torvalds <torvalds@linux-foundation.org> > Diagnosed-by: David S. Miller <davem@davemloft.net> > Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> > CC: Patrick McHardy <kaber@trash.net> > CC: Peter Zijlstra <peterz@infradead.org> Acked-by: David S. Miller <davem@davemloft.net> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Mon, 16 Aug 2010 22:22:10 +0200 > [PATCH] netfilter: {ip,ip6,arp}_tables: avoid lockdep false positive > > After commit 24b36f019 (netfilter: {ip,ip6,arp}_tables: dont block > bottom half more than necessary), lockdep can raise a warning > because we attempt to lock a spinlock with BH enabled, while > the same lock is usually locked by another cpu in a softirq context. > > Disable again BH to avoid these lockdep warnings. > > Reported-by: Linus Torvalds <torvalds@linux-foundation.org> > Diagnosed-by: David S. Miller <davem@davemloft.net> > Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Since Patrick seems to be busy, I'll merge this directly into net-2.6, thanks everyone! -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c index 6bccba3..51d6c31 100644 --- a/net/ipv4/netfilter/arp_tables.c +++ b/net/ipv4/netfilter/arp_tables.c @@ -735,6 +735,7 @@ static void get_counters(const struct xt_table_info *t, if (cpu == curcpu) continue; i = 0; + local_bh_disable(); xt_info_wrlock(cpu); xt_entry_foreach(iter, t->entries[cpu], t->size) { ADD_COUNTER(counters[i], iter->counters.bcnt, @@ -742,6 +743,7 @@ static void get_counters(const struct xt_table_info *t, ++i; } xt_info_wrunlock(cpu); + local_bh_enable(); } put_cpu(); } diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c index c439721..97b64b2 100644 --- a/net/ipv4/netfilter/ip_tables.c +++ b/net/ipv4/netfilter/ip_tables.c @@ -909,6 +909,7 @@ get_counters(const struct xt_table_info *t, if (cpu == curcpu) continue; i = 0; + local_bh_disable(); xt_info_wrlock(cpu); xt_entry_foreach(iter, t->entries[cpu], t->size) { ADD_COUNTER(counters[i], iter->counters.bcnt, @@ -916,6 +917,7 @@ get_counters(const struct xt_table_info *t, ++i; /* macro does multi eval of i */ } xt_info_wrunlock(cpu); + local_bh_enable(); } put_cpu(); } diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c index 5359ef4..29a7bca 100644 --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c @@ -922,6 +922,7 @@ get_counters(const struct xt_table_info *t, if (cpu == curcpu) continue; i = 0; + local_bh_disable(); xt_info_wrlock(cpu); xt_entry_foreach(iter, t->entries[cpu], t->size) { ADD_COUNTER(counters[i], iter->counters.bcnt, @@ -929,6 +930,7 @@ get_counters(const struct xt_table_info *t, ++i; } xt_info_wrunlock(cpu); + local_bh_enable(); } put_cpu(); }