On Fri, Jan 30, 2015 at 11:05 PM, Haiyang Zhang <haiya...@microsoft.com> wrote:


 -----Original Message-----
 From: Jason Wang [mailto:jasow...@redhat.com]
 Sent: Friday, January 30, 2015 5:25 AM
 > + if (ret != 0) {
 > +         if (section_index != NETVSC_INVALID_INDEX)
 > +                 netvsc_free_send_slot(net_device, section_index);
What if ret is -EINVAL or -ENOSPC? Looks like we need free the skb in
 this case also.

In these cases, skb is freed in netvsc_start_xmit().


 >
 > + } else if (skb) {
 > +         dev_kfree_skb_any(skb);
The caller - netvsc_start_xmit() do this also, may be handle this in caller is better since netvsc_start_xmit() is the only user that tries
 to send a skb?

When the packet is sent out normally, we frees it in netvsc_send() if it's copied to send-buffer. The free is done in netvsc_send(), because the copy is also in this function. If it's not copied, it will be freed in another
function -- netvsc_xmit_completion().

netvsc_start_xmit() only does free skb in error case.

Ok.


btw, I find during netvsc_start_xmit(), ret was change to -ENOSPC when
 queue_sends[q_idx] < 1. But non of the caller check -ENOSPC in fact?

In this case, we don't request re-send, so set ret to a value other than -EAGAIN.

Why not? We have available slots for it to be sent now. Dropping the packet in this case may cause out of order sending.
It's handled in the same way as errors != -EAGAIN, so we don't
need to check this value specifically.

Thanks

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to