* [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
@ 2025-08-12 16:45 Stefan Metzmacher
2025-08-13 1:09 ` Namjae Jeon
2025-08-15 12:42 ` Pedro Falcato
0 siblings, 2 replies; 9+ messages in thread
From: Stefan Metzmacher @ 2025-08-12 16:45 UTC (permalink / raw)
To: linux-cifs, samba-technical; +Cc: metze, Namjae Jeon, Steve French, Tom Talpey
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>
---
fs/smb/server/connection.c | 3 ++-
fs/smb/server/transport_rdma.c | 5 ++++-
fs/smb/server/transport_rdma.h | 4 +++-
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/fs/smb/server/connection.c b/fs/smb/server/connection.c
index d1f36f899699..525409706805 100644
--- a/fs/smb/server/connection.c
+++ b/fs/smb/server/connection.c
@@ -517,7 +517,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);
}
diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c
index 99964a75d13e..16bf68dbf4ae 100644
--- a/fs/smb/server/transport_rdma.c
+++ b/fs/smb/server/transport_rdma.c
@@ -2200,7 +2200,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;
@@ -2209,7 +2209,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;
diff --git a/fs/smb/server/transport_rdma.h b/fs/smb/server/transport_rdma.h
index 0fb692c40e21..659ed668de2d 100644
--- a/fs/smb/server/transport_rdma.h
+++ b/fs/smb/server/transport_rdma.h
@@ -13,13 +13,15 @@
#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) { return };
+static inline void ksmbd_rdma_destroy(void) { return; }
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; }
--
2.43.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
2025-08-12 16:45 [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy() Stefan Metzmacher
@ 2025-08-13 1:09 ` Namjae Jeon
2025-08-15 12:42 ` Pedro Falcato
1 sibling, 0 replies; 9+ messages in thread
From: Namjae Jeon @ 2025-08-13 1:09 UTC (permalink / raw)
To: Stefan Metzmacher; +Cc: linux-cifs, samba-technical, Steve French, Tom Talpey
On Wed, Aug 13, 2025 at 1:46 AM Stefan Metzmacher via samba-technical
<samba-technical@lists.samba.org> wrote:
>
> 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>
Applied it to #ksmbd-for-next-next.
Thanks!
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
2025-08-12 16:45 [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy() Stefan Metzmacher
2025-08-13 1:09 ` Namjae Jeon
@ 2025-08-15 12:42 ` Pedro Falcato
2025-08-15 12:45 ` Stefan Metzmacher
1 sibling, 1 reply; 9+ messages in thread
From: Pedro Falcato @ 2025-08-15 12:42 UTC (permalink / raw)
To: Stefan Metzmacher
Cc: linux-cifs, samba-technical, Namjae Jeon, Steve French,
Tom Talpey
On Tue, Aug 12, 2025 at 06:45:46PM +0200, Stefan Metzmacher wrote:
> 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>
> ---
> fs/smb/server/connection.c | 3 ++-
> fs/smb/server/transport_rdma.c | 5 ++++-
> fs/smb/server/transport_rdma.h | 4 +++-
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/fs/smb/server/connection.c b/fs/smb/server/connection.c
> index d1f36f899699..525409706805 100644
> --- a/fs/smb/server/connection.c
> +++ b/fs/smb/server/connection.c
> @@ -517,7 +517,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);
> }
> diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c
> index 99964a75d13e..16bf68dbf4ae 100644
> --- a/fs/smb/server/transport_rdma.c
> +++ b/fs/smb/server/transport_rdma.c
> @@ -2200,7 +2200,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;
> @@ -2209,7 +2209,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;
> diff --git a/fs/smb/server/transport_rdma.h b/fs/smb/server/transport_rdma.h
> index 0fb692c40e21..659ed668de2d 100644
> --- a/fs/smb/server/transport_rdma.h
> +++ b/fs/smb/server/transport_rdma.h
> @@ -13,13 +13,15 @@
>
> #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) { return };
^^ return; (nothing at all would be even better)
This seems to have broken our internal linux-next builds.
Thanks,
Pedro
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
2025-08-15 12:42 ` Pedro Falcato
@ 2025-08-15 12:45 ` Stefan Metzmacher
2025-08-15 16:52 ` Steve French
0 siblings, 1 reply; 9+ messages in thread
From: Stefan Metzmacher @ 2025-08-15 12:45 UTC (permalink / raw)
To: Pedro Falcato
Cc: linux-cifs, samba-technical, Namjae Jeon, Steve French,
Tom Talpey
Hi Pedro,
>> +void ksmbd_rdma_destroy(void)
>> +{
>> if (smb_direct_wq) {
>> destroy_workqueue(smb_direct_wq);
>> smb_direct_wq = NULL;
>> diff --git a/fs/smb/server/transport_rdma.h b/fs/smb/server/transport_rdma.h
>> index 0fb692c40e21..659ed668de2d 100644
>> --- a/fs/smb/server/transport_rdma.h
>> +++ b/fs/smb/server/transport_rdma.h
>> @@ -13,13 +13,15 @@
>>
>> #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) { return };
> ^^ return; (nothing at all would be even better)
> This seems to have broken our internal linux-next builds.
Sorry for that!
Steve can you remove 'return' so that the line is this:
static inline void ksmbd_rdma_stop_listening(void) { }
Thanks!
metze
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
2025-08-15 12:45 ` Stefan Metzmacher
@ 2025-08-15 16:52 ` Steve French
2025-08-15 17:24 ` Stefan Metzmacher
0 siblings, 1 reply; 9+ messages in thread
From: Steve French @ 2025-08-15 16:52 UTC (permalink / raw)
To: Stefan Metzmacher
Cc: Pedro Falcato, linux-cifs, samba-technical, Namjae Jeon,
Tom Talpey
[-- Attachment #1: Type: text/plain, Size: 1774 bytes --]
> Steve can you remove 'return' so that the line is this:
> static inline void ksmbd_rdma_stop_listening(void) {
Done, and have updated ksmbd-for-next
Updated patch also attached, let me know if any problems.
Also let me know if you have rebased versions of the other smbdirect
patches for 6.18-rc so I can get them in linux-next
On Fri, Aug 15, 2025 at 7:45 AM Stefan Metzmacher <metze@samba.org> wrote:
>
> Hi Pedro,
>
> >> +void ksmbd_rdma_destroy(void)
> >> +{
> >> if (smb_direct_wq) {
> >> destroy_workqueue(smb_direct_wq);
> >> smb_direct_wq = NULL;
> >> diff --git a/fs/smb/server/transport_rdma.h b/fs/smb/server/transport_rdma.h
> >> index 0fb692c40e21..659ed668de2d 100644
> >> --- a/fs/smb/server/transport_rdma.h
> >> +++ b/fs/smb/server/transport_rdma.h
> >> @@ -13,13 +13,15 @@
> >>
> >> #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) { return };
> > ^^ return; (nothing at all would be even better)
> > This seems to have broken our internal linux-next builds.
>
> Sorry for that!
>
> Steve can you remove 'return' so that the line is this:
> static inline void ksmbd_rdma_stop_listening(void) { }
>
> Thanks!
> metze
--
Thanks,
Steve
[-- Attachment #2: 0001-smb-server-split-ksmbd_rdma_stop_listening-out-of-ks.patch --]
[-- Type: text/x-patch, Size: 3065 bytes --]
From a49501023f50d39e06c420ac09b74185d06ee0e6 Mon Sep 17 00:00:00 2001
From: Stefan Metzmacher <metze@samba.org>
Date: Tue, 12 Aug 2025 18:45:46 +0200
Subject: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of
ksmbd_rdma_destroy()
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 | 3 ++-
fs/smb/server/transport_rdma.c | 5 ++++-
fs/smb/server/transport_rdma.h | 4 +++-
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/fs/smb/server/connection.c b/fs/smb/server/connection.c
index 3f04a2977ba8..67c4f73398df 100644
--- a/fs/smb/server/connection.c
+++ b/fs/smb/server/connection.c
@@ -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);
}
diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c
index 8d366db5f605..5466aa8c39b1 100644
--- a/fs/smb/server/transport_rdma.c
+++ b/fs/smb/server/transport_rdma.c
@@ -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;
diff --git a/fs/smb/server/transport_rdma.h b/fs/smb/server/transport_rdma.h
index 77aee4e5c9dc..c2f46cd48e44 100644
--- a/fs/smb/server/transport_rdma.h
+++ b/fs/smb/server/transport_rdma.h
@@ -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) { return; }
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; }
--
2.43.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
2025-08-15 16:52 ` Steve French
@ 2025-08-15 17:24 ` Stefan Metzmacher
2025-08-15 18:52 ` Steve French
0 siblings, 1 reply; 9+ messages in thread
From: Stefan Metzmacher @ 2025-08-15 17:24 UTC (permalink / raw)
To: Steve French
Cc: Pedro Falcato, linux-cifs, samba-technical, Namjae Jeon,
Tom Talpey
Am 15.08.25 um 18:52 schrieb Steve French:
>> Steve can you remove 'return' so that the line is this:
>> static inline void ksmbd_rdma_stop_listening(void) {
>
> Done, and have updated ksmbd-for-next
>
> Updated patch also attached, let me know if any problems.
Maybe also remove the 'return;' from the inline ksmbd_rdma_destroy function?
> Also let me know if you have rebased versions of the other smbdirect
> patches for 6.18-rc so I can get them in linux-next
I guess I'll base on Monday on 6.17-rc2 and will post what I have then.
Thanks!
metze
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
2025-08-15 17:24 ` Stefan Metzmacher
@ 2025-08-15 18:52 ` Steve French
2025-08-15 18:54 ` Stefan Metzmacher
0 siblings, 1 reply; 9+ messages in thread
From: Steve French @ 2025-08-15 18:52 UTC (permalink / raw)
To: Stefan Metzmacher
Cc: Pedro Falcato, linux-cifs, samba-technical, Namjae Jeon,
Tom Talpey
[-- Attachment #1: Type: text/plain, Size: 1994 bytes --]
> Maybe also remove the 'return;' from the inline ksmbd_rdma_destroy function?
Done (updated cifs-2.6.git for-next with attached)
It does look a little strange that a trailing ';' is only after the
ksmbd_rdma_stop_listening() line - is that intentional
diff --git a/fs/smb/server/transport_rdma.h b/fs/smb/server/transport_rdma.h
index 77aee4e5c9dc..ce3c88a45875 100644
--- a/fs/smb/server/transport_rdma.h
+++ b/fs/smb/server/transport_rdma.h
@@ -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; }
On Fri, Aug 15, 2025 at 12:24 PM Stefan Metzmacher <metze@samba.org> wrote:
>
> Am 15.08.25 um 18:52 schrieb Steve French:
> >> Steve can you remove 'return' so that the line is this:
> >> static inline void ksmbd_rdma_stop_listening(void) {
> >
> > Done, and have updated ksmbd-for-next
> >
> > Updated patch also attached, let me know if any problems.
>
> Maybe also remove the 'return;' from the inline ksmbd_rdma_destroy function?
>
> > Also let me know if you have rebased versions of the other smbdirect
> > patches for 6.18-rc so I can get them in linux-next
>
> I guess I'll base on Monday on 6.17-rc2 and will post what I have then.
>
> Thanks!
> metze
>
--
Thanks,
Steve
[-- Attachment #2: 0001-smb-server-split-ksmbd_rdma_stop_listening-out-of-ks.patch --]
[-- Type: text/x-patch, Size: 3057 bytes --]
From 656205db650a9942a33b5cc5bc9012c331746596 Mon Sep 17 00:00:00 2001
From: Stefan Metzmacher <metze@samba.org>
Date: Tue, 12 Aug 2025 18:45:46 +0200
Subject: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of
ksmbd_rdma_destroy()
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 | 3 ++-
fs/smb/server/transport_rdma.c | 5 ++++-
fs/smb/server/transport_rdma.h | 4 +++-
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/fs/smb/server/connection.c b/fs/smb/server/connection.c
index 3f04a2977ba8..67c4f73398df 100644
--- a/fs/smb/server/connection.c
+++ b/fs/smb/server/connection.c
@@ -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);
}
diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c
index 8d366db5f605..5466aa8c39b1 100644
--- a/fs/smb/server/transport_rdma.c
+++ b/fs/smb/server/transport_rdma.c
@@ -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;
diff --git a/fs/smb/server/transport_rdma.h b/fs/smb/server/transport_rdma.h
index 77aee4e5c9dc..ce3c88a45875 100644
--- a/fs/smb/server/transport_rdma.h
+++ b/fs/smb/server/transport_rdma.h
@@ -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; }
--
2.43.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
2025-08-15 18:52 ` Steve French
@ 2025-08-15 18:54 ` Stefan Metzmacher
2025-08-15 21:12 ` Steve French
0 siblings, 1 reply; 9+ messages in thread
From: Stefan Metzmacher @ 2025-08-15 18:54 UTC (permalink / raw)
To: Steve French
Cc: Pedro Falcato, linux-cifs, samba-technical, Namjae Jeon,
Tom Talpey
Am 15.08.25 um 20:52 schrieb Steve French:
>> Maybe also remove the 'return;' from the inline ksmbd_rdma_destroy function?
>
> Done (updated cifs-2.6.git for-next with attached)
>
> It does look a little strange that a trailing ';' is only after the
> ksmbd_rdma_stop_listening() line - is that intentional
>
> diff --git a/fs/smb/server/transport_rdma.h b/fs/smb/server/transport_rdma.h
> index 77aee4e5c9dc..ce3c88a45875 100644
> --- a/fs/smb/server/transport_rdma.h
> +++ b/fs/smb/server/transport_rdma.h
> @@ -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) { }
No it needs to be just { } in both cases.
Thanks!
metze
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
2025-08-15 18:54 ` Stefan Metzmacher
@ 2025-08-15 21:12 ` Steve French
0 siblings, 0 replies; 9+ messages in thread
From: Steve French @ 2025-08-15 21:12 UTC (permalink / raw)
To: Stefan Metzmacher
Cc: Pedro Falcato, linux-cifs, samba-technical, Namjae Jeon,
Tom Talpey
[-- Attachment #1: Type: text/plain, Size: 1434 bytes --]
updated ksmbd-for-next (also can see attached patch)
On Fri, Aug 15, 2025 at 1:54 PM Stefan Metzmacher <metze@samba.org> wrote:
>
> Am 15.08.25 um 20:52 schrieb Steve French:
> >> Maybe also remove the 'return;' from the inline ksmbd_rdma_destroy function?
> >
> > Done (updated cifs-2.6.git for-next with attached)
> >
> > It does look a little strange that a trailing ';' is only after the
> > ksmbd_rdma_stop_listening() line - is that intentional
> >
> > diff --git a/fs/smb/server/transport_rdma.h b/fs/smb/server/transport_rdma.h
> > index 77aee4e5c9dc..ce3c88a45875 100644
> > --- a/fs/smb/server/transport_rdma.h
> > +++ b/fs/smb/server/transport_rdma.h
> > @@ -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) { }
>
> No it needs to be just { } in both cases.
>
> Thanks!
> metze
>
>
--
Thanks,
Steve
[-- Attachment #2: 0001-smb-server-split-ksmbd_rdma_stop_listening-out-of-ks.patch --]
[-- Type: text/x-patch, Size: 3056 bytes --]
From 473b1f20f5919ca58deea2d23d39f75b11aef831 Mon Sep 17 00:00:00 2001
From: Stefan Metzmacher <metze@samba.org>
Date: Tue, 12 Aug 2025 18:45:46 +0200
Subject: [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of
ksmbd_rdma_destroy()
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 | 3 ++-
fs/smb/server/transport_rdma.c | 5 ++++-
fs/smb/server/transport_rdma.h | 4 +++-
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/fs/smb/server/connection.c b/fs/smb/server/connection.c
index 3f04a2977ba8..67c4f73398df 100644
--- a/fs/smb/server/connection.c
+++ b/fs/smb/server/connection.c
@@ -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);
}
diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c
index 8d366db5f605..5466aa8c39b1 100644
--- a/fs/smb/server/transport_rdma.c
+++ b/fs/smb/server/transport_rdma.c
@@ -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;
diff --git a/fs/smb/server/transport_rdma.h b/fs/smb/server/transport_rdma.h
index 77aee4e5c9dc..a2291b77488a 100644
--- a/fs/smb/server/transport_rdma.h
+++ b/fs/smb/server/transport_rdma.h
@@ -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; }
--
2.43.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-08-15 21:12 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-12 16:45 [PATCH] smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy() Stefan Metzmacher
2025-08-13 1:09 ` Namjae Jeon
2025-08-15 12:42 ` Pedro Falcato
2025-08-15 12:45 ` Stefan Metzmacher
2025-08-15 16:52 ` Steve French
2025-08-15 17:24 ` Stefan Metzmacher
2025-08-15 18:52 ` Steve French
2025-08-15 18:54 ` Stefan Metzmacher
2025-08-15 21:12 ` Steve French
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).