diff options
author | Björn Töpel <bjorn.topel@intel.com> | 2019-02-12 08:51:14 +0100 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2019-02-12 17:04:45 +0100 |
commit | 1e405c1a3f667bf152905127b94e9c8f454a343e (patch) | |
tree | c34a89d9982bf94b3c0ab423f246e9d6bd6129e7 /net/xdp | |
parent | e451eb51068496054d071af10b3530af4002a4f4 (diff) | |
download | linux-1e405c1a3f667bf152905127b94e9c8f454a343e.tar.gz linux-1e405c1a3f667bf152905127b94e9c8f454a343e.tar.bz2 linux-1e405c1a3f667bf152905127b94e9c8f454a343e.zip |
xsk: do not remove umem from netdevice on fall-back to copy-mode
Commit c9b47cc1fabc ("xsk: fix bug when trying to use both copy and
zero-copy on one queue id") stores the umem into the netdev._rx
struct. However, the patch incorrectly removed the umem from the
netdev._rx struct when user-space passed "best-effort" mode
(i.e. select the fastest possible option available), and zero-copy
mode was not available. This commit fixes that.
Fixes: c9b47cc1fabc ("xsk: fix bug when trying to use both copy and zero-copy on one queue id")
Signed-off-by: Björn Töpel <bjorn.topel@intel.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'net/xdp')
-rw-r--r-- | net/xdp/xdp_umem.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/xdp/xdp_umem.c b/net/xdp/xdp_umem.c index 597866e7c441..37e1fe180769 100644 --- a/net/xdp/xdp_umem.c +++ b/net/xdp/xdp_umem.c @@ -125,9 +125,10 @@ int xdp_umem_assign_dev(struct xdp_umem *umem, struct net_device *dev, return 0; err_unreg_umem: - xdp_clear_umem_at_qid(dev, queue_id); if (!force_zc) err = 0; /* fallback to copy mode */ + if (err) + xdp_clear_umem_at_qid(dev, queue_id); out_rtnl_unlock: rtnl_unlock(); return err; |