[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f38e30af-f4c0-9adc-259a-5e54214e16b1@gmail.com>
Date: Tue, 8 Dec 2020 18:06:02 -0700
From: David Ahern <dsahern@...il.com>
To: Boris Pismenny <borisp@...lanox.com>, kuba@...nel.org,
davem@...emloft.net, saeedm@...dia.com, hch@....de,
sagi@...mberg.me, axboe@...com, kbusch@...nel.org,
viro@...iv.linux.org.uk, edumazet@...gle.com
Cc: boris.pismenny@...il.com, linux-nvme@...ts.infradead.org,
netdev@...r.kernel.org, benishay@...dia.com, ogerlitz@...dia.com,
yorayz@...dia.com
Subject: Re: [PATCH v1 net-next 04/15] net/tls: expose get_netdev_for_sock
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@...lanox.com>
> Reviewed-by: Sagi Grimberg <sagi@...mberg.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.
Powered by blists - more mailing lists