]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ksmbd: make ksmbd thread names distinct by client IP
authorNamjae Jeon <linkinjeon@kernel.org>
Sun, 28 Sep 2025 00:26:48 +0000 (09:26 +0900)
committerSteve French <stfrench@microsoft.com>
Wed, 1 Oct 2025 02:37:54 +0000 (21:37 -0500)
This patch makes ksmbd thread names distinct by client IP address.

100943 ?        S      0:00 [ksmbd:::ffff:10.177.110.57]
 or
101752 ?        S      0:00 [ksmbd:10.177.110.57]

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/transport_tcp.c

index 4337df97987da3807464b5005144eb3d9a9017df..6c6821971cf9205acb085e0303aa3971cf121eb3 100644 (file)
@@ -170,17 +170,6 @@ static struct kvec *get_conn_iovec(struct tcp_transport *t, unsigned int nr_segs
        return new_iov;
 }
 
-static unsigned short ksmbd_tcp_get_port(const struct sockaddr *sa)
-{
-       switch (sa->sa_family) {
-       case AF_INET:
-               return ntohs(((struct sockaddr_in *)sa)->sin_port);
-       case AF_INET6:
-               return ntohs(((struct sockaddr_in6 *)sa)->sin6_port);
-       }
-       return 0;
-}
-
 /**
  * ksmbd_tcp_new_connection() - create a new tcp session on mount
  * @client_sk: socket associated with new connection
@@ -192,7 +181,6 @@ static unsigned short ksmbd_tcp_get_port(const struct sockaddr *sa)
  */
 static int ksmbd_tcp_new_connection(struct socket *client_sk)
 {
-       struct sockaddr *csin;
        int rc = 0;
        struct tcp_transport *t;
        struct task_struct *handler;
@@ -203,27 +191,26 @@ static int ksmbd_tcp_new_connection(struct socket *client_sk)
                return -ENOMEM;
        }
 
-       csin = KSMBD_TCP_PEER_SOCKADDR(KSMBD_TRANS(t)->conn);
-       if (kernel_getpeername(client_sk, csin) < 0) {
-               pr_err("client ip resolution failed\n");
-               rc = -EINVAL;
-               goto out_error;
-       }
-
+#if IS_ENABLED(CONFIG_IPV6)
+       if (client_sk->sk->sk_family == AF_INET6)
+               handler = kthread_run(ksmbd_conn_handler_loop,
+                               KSMBD_TRANS(t)->conn, "ksmbd:%pI6c",
+                               &KSMBD_TRANS(t)->conn->inet6_addr);
+       else
+               handler = kthread_run(ksmbd_conn_handler_loop,
+                               KSMBD_TRANS(t)->conn, "ksmbd:%pI4",
+                               &KSMBD_TRANS(t)->conn->inet_addr);
+#else
        handler = kthread_run(ksmbd_conn_handler_loop,
-                             KSMBD_TRANS(t)->conn,
-                             "ksmbd:%u",
-                             ksmbd_tcp_get_port(csin));
+                       KSMBD_TRANS(t)->conn, "ksmbd:%pI4",
+                       &KSMBD_TRANS(t)->conn->inet_addr);
+#endif
        if (IS_ERR(handler)) {
                pr_err("cannot start conn thread\n");
                rc = PTR_ERR(handler);
                free_transport(t);
        }
        return rc;
-
-out_error:
-       free_transport(t);
-       return rc;
 }
 
 /**