[PATCH v1 net-next 04/15] net/tls: expose get_netdev_for_sock
David Ahern
dsahern at gmail.com
Tue Dec 8 20:06:02 EST 2020
On 12/7/20 2:06 PM, Boris Pismenny wrote:
> get_netdev_for_sock is a utility that is used to obtain
> the net_device structure from a connected socket.
>
> Later patches will use this for nvme-tcp DDP and DDP CRC offloads.
>
> Signed-off-by: Boris Pismenny <borisp at mellanox.com>
> Reviewed-by: Sagi Grimberg <sagi at grimberg.me>
> ---
> include/net/sock.h | 17 +++++++++++++++++
> net/tls/tls_device.c | 20 ++------------------
> 2 files changed, 19 insertions(+), 18 deletions(-)
>
> diff --git a/include/net/sock.h b/include/net/sock.h
> index 093b51719c69..a8f7393ea433 100644
> --- a/include/net/sock.h
> +++ b/include/net/sock.h
> @@ -2711,4 +2711,21 @@ void sock_set_sndtimeo(struct sock *sk, s64 secs);
>
> int sock_bind_add(struct sock *sk, struct sockaddr *addr, int addr_len);
>
> +/* Assume that the socket is already connected */
> +static inline struct net_device *get_netdev_for_sock(struct sock *sk, bool hold)
> +{
> + struct dst_entry *dst = sk_dst_get(sk);
> + struct net_device *netdev = NULL;
> +
> + if (likely(dst)) {
> + netdev = dst->dev;
I noticed you grab this once when the offload is configured. The dst
device could change - e.g., ECMP, routing changes. I'm guessing that
does not matter much for the use case - you are really wanting to
configure queues and zc buffers for a flow with the device; the netdev
is an easy gateway to get to it.
But, data center deployments tend to have redundant access points --
either multipath for L3 or bond for L2. For the latter, this offload
setup won't work - dst->dev will be the bond, the bond does not support
the offload, so user is out of luck.
More information about the Linux-nvme
mailing list