日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

consume_skb 和 kfree_skb的区别

發(fā)布時(shí)間:2025/4/5 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 consume_skb 和 kfree_skb的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

consume_skb?表示?skb是正常釋放。

kfree_skb?表示因?yàn)槟撤N錯(cuò)誤報(bào)文被丟棄。

這只會(huì)帶來某些網(wǎng)絡(luò)統(tǒng)計(jì)數(shù)據(jù)上的區(qū)別,例如使用drop_watch查看有多少異常丟包的時(shí)候。

通過源碼上也可以看到,兩者實(shí)現(xiàn)基本一致,除了調(diào)用不同的統(tǒng)計(jì)分析函數(shù):

trace_consume_skb, trace_kfree_skb

/*** consume_skb - free an skbuff* @skb: buffer to free** Drop a ref to the buffer and free it if the usage count has hit zero* Functions identically to kfree_skb, but kfree_skb assumes that the frame* is being dropped after a failure and notes that*/ void consume_skb(struct sk_buff *skb) {if (unlikely(!skb))return;if (likely(atomic_read(&skb->users) == 1))smp_rmb();else if (likely(!atomic_dec_and_test(&skb->users)))return;trace_consume_skb(skb);__kfree_skb(skb); } EXPORT_SYMBOL(consume_skb);/*** kfree_skb - free an sk_buff* @skb: buffer to free** Drop a reference to the buffer and free it if the usage count has* hit zero.*/ void kfree_skb(struct sk_buff *skb) {if (unlikely(!skb))return;if (likely(atomic_read(&skb->users) == 1))smp_rmb();else if (likely(!atomic_dec_and_test(&skb->users)))return;trace_kfree_skb(skb, __builtin_return_address(0));__kfree_skb(skb); } EXPORT_SYMBOL(kfree_skb);

?

總結(jié)

以上是生活随笔為你收集整理的consume_skb 和 kfree_skb的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。