BBS水木清华站∶精华区
发信人: lightofstar (star), 信区: Linux
标 题: 看过源码的高手解释一下?
发信站: BBS 水木清华站 (Wed Dec 13 23:08:33 2000)
void kfree_skbmem(struct sk_buff *skb)
{
if (!skb->cloned || atomic_dec_and_test(skb_datarefp(skb)))
kfree(skb->head);
kmem_cache_free(skbuff_head_cache, skb);
atomic_dec(&net_skbcount);
}
extern __inline__ atomic_t *skb_datarefp(struct sk_buff *skb)
{
return (atomic_t *)(skb->end);
}
第一个函数调用了第二个函数,那么假如skb_cloned == 1时,
什么时候才能执行 kfree(skb->head)??
skb_end本身指的是数据部分的结尾,分配sk_buff时是个定值。
调用atomic_dec_and_test处理它,能够减少数据部分的引用次数吗?
当数据部分被两个sk_buff共享时,什么时候才是真正的释放了数据区?
--
※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.25.133.3]
BBS水木清华站∶精华区