Subject: Re: [PATCH bpf v4] xsk: do not discard packet when NETDEV_TX_BUSY

From: Jesse Brandeburg <[email-masked]>
Date: Mon, 14 Sep 2020 09:52:39 -0700

Magnus Karlsson wrote:

> From: Magnus Karlsson <[email-masked]>
> 
> In the skb Tx path, transmission of a packet is performed with
> dev_direct_xmit(). When NETDEV_TX_BUSY is set in the drivers, it
> signifies that it was not possible to send the packet right now,
> please try later. Unfortunately, the xsk transmit code discarded the
> packet and returned EBUSY to the application. Fix this unnecessary
> packet loss, by not discarding the packet in the Tx ring and return
> EAGAIN. As EAGAIN is returned to the application, it can then retry
> the send operation later and the packet will then likely be sent as
> the driver will then likely have space/resources to send the packet.
> 
> In summary, EAGAIN tells the application that the packet was not
> discarded from the Tx ring and that it needs to call send()
> again. EBUSY, on the other hand, signifies that the packet was not
> sent and discarded from the Tx ring. The application needs to put the
> packet on the Tx ring again if it wants it to be sent.
> 
> Fixes: 35fcde7f8deb ("xsk: support for Tx")
> Signed-off-by: Magnus Karlsson <[email-masked]>
> Reported-by: Arkadiusz Zema <[email-masked]>
> Suggested-by: Arkadiusz Zema <[email-masked]>
> Suggested-by: Daniel Borkmann <[email-masked]>

Patch seems to make sense to me, better matches the expectations/path
of the stack.

Reviewed-by: Jesse Brandeburg <[email-masked]>