⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000040.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;mephisto&nbsp;(梦菲斯特*大宝宝),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;看过源码的高手解释一下?&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Thu&nbsp;Dec&nbsp;14&nbsp;17:26:29&nbsp;2000)&nbsp;<BR>&nbsp;<BR>I&nbsp;am&nbsp;pretty&nbsp;sure&nbsp;I&nbsp;have&nbsp;send&nbsp;you&nbsp;mail&nbsp;about&nbsp;this.&nbsp;Havn't&nbsp;you&nbsp;get&nbsp;that?&nbsp;<BR>&nbsp;<BR>【&nbsp;在&nbsp;lightofstar&nbsp;(star)&nbsp;的大作中提到:&nbsp;】&nbsp;<BR>∶<I>&nbsp;void&nbsp;kfree_skbmem(struct&nbsp;sk_buff&nbsp;*skb)&nbsp;</I><BR>∶<I>&nbsp;{&nbsp;</I><BR>∶<I>&nbsp;&nbsp;if&nbsp;(!skb-&gt;cloned&nbsp;||&nbsp;atomic_dec_and_test(skb_datarefp(skb)))&nbsp;</I><BR>∶<I>&nbsp;&nbsp;&nbsp;kfree(skb-&gt;head);&nbsp;</I><BR>∶<I>&nbsp;&nbsp;kmem_cache_free(skbuff_head_cache,&nbsp;skb);&nbsp;</I><BR>∶<I>&nbsp;&nbsp;atomic_dec(&amp;net_skbcount);&nbsp;</I><BR>∶<I>&nbsp;}&nbsp;</I><BR>∶<I>&nbsp;extern&nbsp;__inline__&nbsp;atomic_t&nbsp;*skb_datarefp(struct&nbsp;sk_buff&nbsp;*skb)&nbsp;</I><BR>∶<I>&nbsp;{&nbsp;</I><BR>∶<I>&nbsp;&nbsp;return&nbsp;(atomic_t&nbsp;*)(skb-&gt;end);&nbsp;</I><BR>∶<I>&nbsp;}&nbsp;</I><BR>∶<I>&nbsp;第一个函数调用了第二个函数,那么假如skb_cloned&nbsp;==&nbsp;1时,&nbsp;</I><BR>∶<I>&nbsp;什么时候才能执行&nbsp;kfree(skb-&gt;head)??&nbsp;</I><BR>when&nbsp;*(skb-&gt;end)&nbsp;==&nbsp;1,&nbsp;atomic_dec_and_test(..)return&nbsp;TRUE.&nbsp;<BR>Then&nbsp;release.&nbsp;<BR>∶<I>&nbsp;skb_end本身指的是数据部分的结尾,分配sk_buff时是个定值。&nbsp;</I><BR>Exactly.&nbsp;<BR>Here&nbsp;is&nbsp;the&nbsp;trick,&nbsp;skb_end&nbsp;is&nbsp;pointer&nbsp;to&nbsp;data&nbsp;end&nbsp;bound.&nbsp;<BR>Kernel&nbsp;use&nbsp;the&nbsp;next&nbsp;mem&nbsp;as&nbsp;a&nbsp;reference&nbsp;counter.&nbsp;<BR>data-&gt;[&nbsp;the&nbsp;buffer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;---&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[reference&nbsp;counter]&nbsp;<BR>Because&nbsp;they&nbsp;need&nbsp;the&nbsp;reference&nbsp;counter&nbsp;go&nbsp;with&nbsp;the&nbsp;data,&nbsp;not&nbsp;the&nbsp;<BR>skb_buff,&nbsp;skb_buff&nbsp;might&nbsp;release&nbsp;earlyer&nbsp;than&nbsp;the&nbsp;data.&nbsp;<BR>&nbsp;<BR>skb_clone()&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;atomic_inc(skb_datarefp(skb));&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<BR>}&nbsp;<BR>alloc_skb()&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;atomic_set(skb_datarefp(skb),1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>∶<I>&nbsp;调用atomic_dec_and_test处理它,能够减少数据部分的引用次数吗?&nbsp;</I><BR>∶<I>&nbsp;当数据部分被两个sk_buff共享时,什么时候才是真正的释放了数据区?&nbsp;</I><BR>when&nbsp;the&nbsp;counter&nbsp;dec&nbsp;to&nbsp;0&nbsp;;-)&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>约塞连怀疑地摇了摇头,拒绝接受丹比的劝告.&quot;当我抬起来时,我看到人们全在设法赚钱.我&nbsp;<BR>看不见天堂,看不见圣人,也看不见天使.我只看见人们利用每一次正当的冲动和每一场人类&nbsp;<BR>的悲剧大把大把地捞钱.&quot;&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;smth.org·[FROM:&nbsp;211.99.241.146]&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -