]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ksmbd: set 445 port to smbdirect port by default
authorNamjae Jeon <linkinjeon@kernel.org>
Mon, 18 Dec 2023 15:32:37 +0000 (00:32 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 23 Dec 2023 09:41:50 +0000 (10:41 +0100)
[ Upstream commit cb097b3dd5ece9596a0a0b7e33893c02a9bde8c6 ]

When SMB Direct is used with iWARP, Windows use 5445 port for smb direct
port, 445 port for SMB. This patch check ib_device using ib_client to
know if NICs type is iWARP or Infiniband.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/ksmbd/transport_rdma.c
fs/ksmbd/transport_rdma.h

index 3bcca8e5a6c839d0901d6285c57d09a6eab303da..9d12ef4024e21a3a25361c73405f5a84b22f3ab2 100644 (file)
@@ -34,7 +34,8 @@
 #include "smbstatus.h"
 #include "transport_rdma.h"
 
-#define SMB_DIRECT_PORT        5445
+#define SMB_DIRECT_PORT_IWARP          5445
+#define SMB_DIRECT_PORT_INFINIBAND     445
 
 #define SMB_DIRECT_VERSION_LE          cpu_to_le16(0x0100)
 
  * as defined in [MS-SMBD] 3.1.1.1
  * Those may change after a SMB_DIRECT negotiation
  */
+
+/* Set 445 port to SMB Direct port by default */
+static int smb_direct_port = SMB_DIRECT_PORT_INFINIBAND;
+
 /* The local peer's maximum number of credits to grant to the peer */
 static int smb_direct_receive_credit_max = 255;
 
@@ -1948,7 +1953,7 @@ static int smb_direct_handle_connect_request(struct rdma_cm_id *new_cm_id)
 
        KSMBD_TRANS(t)->handler = kthread_run(ksmbd_conn_handler_loop,
                                              KSMBD_TRANS(t)->conn, "ksmbd:r%u",
-                                             SMB_DIRECT_PORT);
+                                             smb_direct_port);
        if (IS_ERR(KSMBD_TRANS(t)->handler)) {
                int ret = PTR_ERR(KSMBD_TRANS(t)->handler);
 
@@ -2025,6 +2030,10 @@ static int smb_direct_ib_client_add(struct ib_device *ib_dev)
 {
        struct smb_direct_device *smb_dev;
 
+       /* Set 5445 port if device type is iWARP(No IB) */
+       if (ib_dev->node_type != RDMA_NODE_IB_CA)
+               smb_direct_port = SMB_DIRECT_PORT_IWARP;
+
        if (!ib_dev->ops.get_netdev ||
            !rdma_frwr_is_supported(&ib_dev->attrs))
                return 0;
@@ -2086,7 +2095,7 @@ int ksmbd_rdma_init(void)
        if (!smb_direct_wq)
                return -ENOMEM;
 
-       ret = smb_direct_listen(SMB_DIRECT_PORT);
+       ret = smb_direct_listen(smb_direct_port);
        if (ret) {
                destroy_workqueue(smb_direct_wq);
                smb_direct_wq = NULL;
index 3e6c4be3d560e5f4df146828f8fd4a8039b0998e..e7b4e6790fab8416490950d69b2c5bcacef8101f 100644 (file)
@@ -7,8 +7,6 @@
 #ifndef __KSMBD_TRANSPORT_RDMA_H__
 #define __KSMBD_TRANSPORT_RDMA_H__
 
-#define SMB_DIRECT_PORT        5445
-
 #define SMBD_DEFAULT_IOSIZE (8 * 1024 * 1024)
 #define SMBD_MIN_IOSIZE (512 * 1024)
 #define SMBD_MAX_IOSIZE (16 * 1024 * 1024)