[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200724201412.599398-1-tom@herbertland.com>
Date: Fri, 24 Jul 2020 13:14:09 -0700
From: Tom Herbert <tom@...bertland.com>
To: netdev@...r.kernel.org, amritha.nambiar@...el.com
Cc: Tom Herbert <tom@...bertland.com>
Subject: [RFC PATCH net-next 0/3] sock: Fix sock queue mapping to include device
The transmit queue selected for a packet is saved in the associated sock
for the packet and is subsequently used to avoid recalculating the queue
on subsequent sends. The problem is that the corresponding device is not
also recorded so that when the queue mapping is referenced it may
correspond to a different device than the sending one, resulting in an
incorrect queue being used for transmit. A similar problem exists in
recording the receive queue in the sock without the corresponding
receive device.
This patch set fixes the issue by recording both the device (via
ifindex) and the queue in the sock mapping. The pair is set and
retrieved atomically. The caller getting the mapping pair checks
that both the recorded queue and in the device are valid in the
context (for instance, in transmit the returned ifindex is checked
against that of the transmitting device to ensure they refer to
same device before apply the recorded queue).
This patch set contains:
- Definition of dev_and_queue structure to hold the ifindex
and queue number
- Generic functions to get, set, and clear dev_and_queue
structure
- Change sk_tx_queue_{get,set,clear} to
sk_tx_dev_and_queue_{get,set,clear}
- Modify callers of above to use new interface
- Change sk_rx_queue_{get,set,clear} to
sk_rx_dev_and_queue_{get,set,clear}
- Modify callers of above to use new interface
Tom Herbert (3):
sock: Definition and general functions for dev_and_queue structure
sock: Use dev_and_queue structure for TX queue mapping in sock
sock: Use dev_and_queue structure for RX queue mapping in sock
.../mellanox/mlx5/core/en_accel/ktls_rx.c | 10 +-
drivers/net/hyperv/netvsc_drv.c | 9 +-
include/net/busy_poll.h | 2 +-
include/net/request_sock.h | 2 +-
include/net/sock.h | 126 +++++++++++++-----
net/core/dev.c | 15 ++-
net/core/filter.c | 7 +-
net/core/sock.c | 10 +-
net/ipv4/tcp_input.c | 2 +-
9 files changed, 124 insertions(+), 59 deletions(-)
--
2.25.1
Powered by blists - more mailing lists