]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
authorStefan Metzmacher <metze@samba.org>
Tue, 12 Aug 2025 16:45:46 +0000 (18:45 +0200)
committerSteve French <stfrench@microsoft.com>
Sun, 17 Aug 2025 23:23:22 +0000 (18:23 -0500)
We can't call destroy_workqueue(smb_direct_wq); before stop_sessions()!

Otherwise already existing connections try to use smb_direct_wq as
a NULL pointer.

Cc: Namjae Jeon <linkinjeon@kernel.org>
Cc: Steve French <smfrench@gmail.com>
Cc: Tom Talpey <tom@talpey.com>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Fixes: 0626e6641f6b ("cifsd: add server handler for central processing and tranport layers")
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/connection.c
fs/smb/server/transport_rdma.c
fs/smb/server/transport_rdma.h

index 3f04a2977ba86c22eac06f6270496cee4526a365..67c4f73398dfee038b40feffe92cd7b2121dd588 100644 (file)
@@ -504,7 +504,8 @@ void ksmbd_conn_transport_destroy(void)
 {
        mutex_lock(&init_lock);
        ksmbd_tcp_destroy();
-       ksmbd_rdma_destroy();
+       ksmbd_rdma_stop_listening();
        stop_sessions();
+       ksmbd_rdma_destroy();
        mutex_unlock(&init_lock);
 }
index 8d366db5f60547af18b035842bfd3c0aff59f8e4..5466aa8c39b1cdf04b5000e02ade9e835098688a 100644 (file)
@@ -2194,7 +2194,7 @@ int ksmbd_rdma_init(void)
        return 0;
 }
 
-void ksmbd_rdma_destroy(void)
+void ksmbd_rdma_stop_listening(void)
 {
        if (!smb_direct_listener.cm_id)
                return;
@@ -2203,7 +2203,10 @@ void ksmbd_rdma_destroy(void)
        rdma_destroy_id(smb_direct_listener.cm_id);
 
        smb_direct_listener.cm_id = NULL;
+}
 
+void ksmbd_rdma_destroy(void)
+{
        if (smb_direct_wq) {
                destroy_workqueue(smb_direct_wq);
                smb_direct_wq = NULL;
index 77aee4e5c9dcd8b0cbcef907cc0934495635ec90..a2291b77488a15381bd0c1775ca49ae226d7d44c 100644 (file)
@@ -54,13 +54,15 @@ struct smb_direct_data_transfer {
 
 #ifdef CONFIG_SMB_SERVER_SMBDIRECT
 int ksmbd_rdma_init(void);
+void ksmbd_rdma_stop_listening(void);
 void ksmbd_rdma_destroy(void);
 bool ksmbd_rdma_capable_netdev(struct net_device *netdev);
 void init_smbd_max_io_size(unsigned int sz);
 unsigned int get_smbd_max_read_write_size(void);
 #else
 static inline int ksmbd_rdma_init(void) { return 0; }
-static inline int ksmbd_rdma_destroy(void) { return 0; }
+static inline void ksmbd_rdma_stop_listening(void) { }
+static inline void ksmbd_rdma_destroy(void) { }
 static inline bool ksmbd_rdma_capable_netdev(struct net_device *netdev) { return false; }
 static inline void init_smbd_max_io_size(unsigned int sz) { }
 static inline unsigned int get_smbd_max_read_write_size(void) { return 0; }