[PATCH] net: excessive UDP lost on VE send path
When tring to send big UDP packets from VE then other side
receive about 60% of all IP fragmentated packets and about 10% of all UDP packets
that was sent from VE. Fragmentated IP-packets are dropped on an ethernet interface
because an interface's queue is full.
The ethernet interface's queue get full as venet/veth device passes
fragmentated IP-packet with calling a sk_buff's destructor (by skb_orphan),
socket's buffer become free, although it
IP-packet isn't passed through the ethernet device.
Therefore bulk IP-packets are sent through venet/veth interface
that is much more than the real ethernet interface can transfer.
venet/veth interface call skb_orphan only for non IP-packets.
For IP packets skb_orhpan (actually destructor) is called later:
in IP local or when skb is delivered to ethernet and __kfree_skb() is called.
Tested with venet, veth, veth + vlan (host-node).
Thanks to Denis Lunev and Alexey Kuznetsov for ideas and help.