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 <bor...@mellanox.com> > Reviewed-by: Sagi Grimberg <s...@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.