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 129d200bccb4..3f9ae5615daa 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -2728,4 +2728,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;
+               if (hold)
+                       dev_hold(netdev);
+       }
+
+       dst_release(dst);
+
+       return netdev;
+}
+
 #endif /* _SOCK_H */
diff --git a/net/tls/tls_device.c b/net/tls/tls_device.c
index d9cd229aa111..792c0a477850 100644
--- a/net/tls/tls_device.c
+++ b/net/tls/tls_device.c
@@ -106,22 +106,6 @@ static void tls_device_queue_ctx_destruction(struct 
tls_context *ctx)
        spin_unlock_irqrestore(&tls_device_lock, flags);
 }
 
-/* We assume that the socket is already connected */
-static struct net_device *get_netdev_for_sock(struct sock *sk)
-{
-       struct dst_entry *dst = sk_dst_get(sk);
-       struct net_device *netdev = NULL;
-
-       if (likely(dst)) {
-               netdev = netdev_sk_get_lowest_dev(dst->dev, sk);
-               dev_hold(netdev);
-       }
-
-       dst_release(dst);
-
-       return netdev;
-}
-
 static void destroy_record(struct tls_record_info *record)
 {
        int i;
@@ -1106,7 +1090,7 @@ int tls_set_device_offload(struct sock *sk, struct 
tls_context *ctx)
        if (skb)
                TCP_SKB_CB(skb)->eor = 1;
 
-       netdev = get_netdev_for_sock(sk);
+       netdev = get_netdev_for_sock(sk, true);
        if (!netdev) {
                pr_err_ratelimited("%s: netdev not found\n", __func__);
                rc = -EINVAL;
@@ -1182,7 +1166,7 @@ int tls_set_device_offload_rx(struct sock *sk, struct 
tls_context *ctx)
        if (ctx->crypto_recv.info.version != TLS_1_2_VERSION)
                return -EOPNOTSUPP;
 
-       netdev = get_netdev_for_sock(sk);
+       netdev = get_netdev_for_sock(sk, true);
        if (!netdev) {
                pr_err_ratelimited("%s: netdev not found\n", __func__);
                return -EINVAL;
-- 
2.24.1

Reply via email to