aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMagnus Karlsson <magnus.karlsson@intel.com>2018-07-11 10:12:50 +0200
committerDaniel Borkmann <daniel@iogearbox.net>2018-07-13 15:34:31 +0200
commit9684f5e7c8cdf076aeec81344d4893a30f7aa6a1 (patch)
tree7a040d749346cd1b34b5eaa35980c09a6a57399e
parentxsk: do not return ENXIO from TX copy mode (diff)
downloadlinux-dev-9684f5e7c8cdf076aeec81344d4893a30f7aa6a1.tar.xz
linux-dev-9684f5e7c8cdf076aeec81344d4893a30f7aa6a1.zip
xsk: do not return EAGAIN from sendmsg when completion queue is full
This patch stops returning EAGAIN in TX copy mode when the completion queue is full as zero-copy does not do this. Instead this situation can be detected by comparing the head and tail pointers of the completion queue in both modes. In any case, EAGAIN was not the correct error code here since no amount of calling sendmsg will solve the problem. Only consuming one or more messages on the completion queue will fix this. With this patch, the error reporting becomes consistent between copy mode and zero-copy mode. Fixes: 35fcde7f8deb ("xsk: support for Tx") Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
-rw-r--r--net/xdp/xsk.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c
index 08d09115093e..87567232d0f8 100644
--- a/net/xdp/xsk.c
+++ b/net/xdp/xsk.c
@@ -233,10 +233,8 @@ static int xsk_generic_xmit(struct sock *sk, struct msghdr *m,
goto out;
}
- if (xskq_reserve_addr(xs->umem->cq)) {
- err = -EAGAIN;
+ if (xskq_reserve_addr(xs->umem->cq))
goto out;
- }
len = desc.len;
if (unlikely(len > xs->dev->mtu)) {