linux-cifs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).