Hi,
The way I read this, __kfree_skb will sometimes be called with ->users = 1 and
sometimes with ->users = 0, is that right?
static inline void kfree_skb(struct sk_buff *skb)
{
if (likely(atomic_read(&skb->users) == 1))
smp_rmb();
else if (likely(!atomic_dec_and_test(&skb->users)))
return;
__kfree_skb(skb);
}
If so, then why not just:
static inline void kfree_skb(struct sk_buff *skb)
{
if (likely(atomic_read(&skb->users) == 1))
smp_rmb();
if (likely(!atomic_dec_and_test(&skb->users)))
return;
__kfree_skb(skb);
}
so __kfree_skb can BUG_ON(atomic_read(&skb->users))? Perhaps this has
something to do with the smp_rmb, could somebody please explain to me why it
is necessary here, and for which architectures?
Anyway, do we not want BUG_ON(!atomic_read(&skb->users)) at the beginning of
kfree_skb, since we rely on it?
Regards,
Daniel
-
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