驱动内核:kfree_skb kfree_skb()释放一个SKB的步骤: 1)kfree_skb()检测sk_buff结构的引用计数users,如果不为1,则说明此次释放后该SKB还将被用户占用, 因此递减引用计数users后即返回;否则说明不再有其他用户占用该sk_buff结构,调用__kfree_skb()释放之。 2)SKB描述符中包含一个dst_entry结构的引用,在释放...
51CTO博客已为您找到关于kfree_skb调用destructor的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及kfree_skb调用destructor问答内容。更多kfree_skb调用destructor相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。
consume_skb 表示 skb是正常释放。 kfree_skb 表示因为某种错误报文被丢弃。 这只会带来某些网络统计数据上的区别,例如使用drop_watch查看有多少异常丢包的时候。 通过源码上也可以看到,两者实现基本一致,除了调用不同的统计分析函数: trace_consume_skb, trace_kfree_skb /** * consume_skb - free an skbuff *...
__skb_unlink(skb) kfree_skb(sb) kfree_skb(skb) cpu1 进行__skb_unlink后kfree_skb中走的是atomic_dec_and_test分支(因为前面user+=1了,且有自旋锁操作),因此cpu1此时看到了所有的cpu0对skb的操作。cpu1执行完kfree_skb后该轮到cpu0的操作(或者与此同时cpu0也去操作),因为atomic_dec_and_test也...
It hasn't. But that shouldn't happen since5* we're waiting for TxOk, so return 1 and requeue this packet.6*/78spin_unlock_irq(&lp->lock);9if(net_debug) printk("cs89x0: Tx buffer not free!\n");10//当检测到网卡暂时无法发送数据时,会直接return 1,而没有调dev_kfree_skb (skb...
skb->_skb_refdst = orefdst;returnres; }return-1; err:kfree_skb(skb);return-1; } 开发者ID:PDi-Communication-Systems-Inc,项目名称:lollipop_vendor_backports-3.19-rc1-1_old,代码行数:88,代码来源:reassembly.c 示例3: ip6_xmit ▲点赞 4▼ ...
+ int n_skbs = 0; - kfree_skb(segs); - segs = next; + while ((segs = next) != NULL) { + next = segs->next; + + if (segs->fclone != SKB_FCLONE_UNAVAILABLE) { + kfree_skb(segs); + continue; + } + + if (!skb_unref(segs)) + continue; + + trace_kfree_skb(se...
This patch prevents the skb to be freed within the call to netif_rx() by incrementing its reference count with skb_get(). The skb is finally freed by one of the in-irq-context safe functions: dev_consume_skb_any() or dev_kfree_skb_any(). The "any" version is used because ...
> > From: Colin Ian King <colin.k...@canonical.com> > > > > The error return path via label rel_resource checks for a non-null > > skb before free'ing it. However, skb is always null at this exit > > path, so the null check and the free are redundant and can be removed....
+ dev_kfree_skb(dev->rx_skb_pool[i]); } static void rx_fixup(unsigned long data) @@ -946,8 +945,7 @@ static void rtl8150_disconnect(struct usb_interface *intf) unlink_all_urbs(dev); free_all_urbs(dev); free_skb_pool(dev); ...