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水木清华站∶精华区