xt_info_rdlock_bh() called recursively here will enter the
critical region without &__get_cpu_var(xt_info_locks)->lock.
Because xt_info_rdlock_bh() called recursively here sees
lock->depth >= 0, and "++lock->depth == 0" is false.
Sorry for it.
Is this OK:
void xt_info_rdlock_bh(void)
{
struct xt_info_lock *lock;
local_bh_disable();
lock = &__get_cpu_var(xt_info_locks);
if (likely(++lock->depth == 0))
spin_lock(&lock->lock);
else
local_bh_enable();
}
I did not think things carefully enough, and I do know
nothing about ip/ip6/arp.
Lai
--
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