On Fri, Jan 30, 2015 at 11:05 PM, Haiyang Zhang
<haiyangz@xxxxxxxxxxxxx> wrote:
-----Original Message-----
From: Jason Wang [mailto:jasowang@xxxxxxxxxx]
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
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel