consume_skb 和 kfree_skb的区别
生活随笔
收集整理的這篇文章主要介紹了
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sendto 返回errnor 1,错误
- 下一篇: Unable to handle ker