a question about dev_hold() and dev_put()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I have a question about dev_hold() and dev_put():
When we start to use a device, we call dev_hold(). call dev_put(), when we finish. sk_buff has a field of dev, but the operation for this field (I mean dev_hold() and dev_put()) seems a little different. If it is the outgoing sk_buff, the dev of sk_buff is from dst_entry. I read the code of the kernel, I don't see dev_hold() is called when dst->dev is assigned to skb->dev. If the incoming skb_buff, the dev of sk_buf is set by the driver of the network device. I see dev_hold() is called for skb->dev in netif_rx() and dev_put() is called in process_backlog(). So my conclusion is that we don't need to call dev_hold() and dev_put() for the dev of the outgoing skb_buff, dst_entry structure will take care of it. For incoming skb_buff, we have to handle it manually. So, for example, if the dev of sk_buff is changed in the network stack, we have to call dev_put() for the old device, and call dev_hold() for the new one.
Is it right?
I'm writing a kernel module which needs to handle this stuff, so I want to make sure my understanding is right.

Best,
Zheng Da

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux