dev_queue_xmit()函式返回值問題

lxgeek發表於2014-10-22

函式  dev_queue_xmit()用於直接使用sk_buf發包,此函式有返回值,但是並不能通過

此函式返回值為0來說明包已經傳送出去且可以立刻釋放sk_buff記憶體。因為網路卡發包是一個非同步的過程,

比如ixgbe網路卡驅動發包過程可以檢視此文。因此,解決辦法是在skb_buff->uers

沒有減少的情況下,將其存放於連結串列,稍後再釋放記憶體。比如:

 

            dev_queue_xmit(send_skb);
            if (atomic_read(&(send_skb->users)) == 1){
                kmem_cache_free(skbuff_head_cache, send_skb);
            }
            else
            {
                struct free_slab *ptr = kmem_cache_alloc(skbuff_free_cache, GFP_ATOMIC & ~__GFP_DMA);
                ptr->free_mem = send_skb;
                spin_lock(&lock);
                list_add(&ptr->list, &head_free_slab);
                spin_unlock(&lock);
            }

 

相關文章