[PATCH v4 140/145] smb: smbdirect: split out smbdirect_accept_negotiate_finish()

Stefan Metzmacher metze at samba.org
Tue Nov 25 17:56:26 UTC 2025


This will make it easier to support the listen/accept socket interfaces
in the next steps.

Cc: Steve French <smfrench at gmail.com>
Cc: Tom Talpey <tom at talpey.com>
Cc: Long Li <longli at microsoft.com>
Cc: Namjae Jeon <linkinjeon at kernel.org>
Cc: linux-cifs at vger.kernel.org
Cc: samba-technical at lists.samba.org
Signed-off-by: Stefan Metzmacher <metze at samba.org>
---
 fs/smb/common/smbdirect/smbdirect_accept.c   | 24 +++++++++++++++-----
 fs/smb/common/smbdirect/smbdirect_internal.h |  2 ++
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/fs/smb/common/smbdirect/smbdirect_accept.c b/fs/smb/common/smbdirect/smbdirect_accept.c
index 2ff61a4617be..d8818a0a8286 100644
--- a/fs/smb/common/smbdirect/smbdirect_accept.c
+++ b/fs/smb/common/smbdirect/smbdirect_accept.c
@@ -292,11 +292,7 @@ static void smbdirect_accept_negotiate_recv_work(struct work_struct *work)
 	u32 preferred_send_size;
 	u32 max_receive_size;
 	u32 max_fragmented_size;
-	struct smbdirect_send_io *send_io = NULL;
-	struct smbdirect_negotiate_resp *nrep;
 	u32 ntstatus;
-	int posted;
-	int ret;
 
 	/*
 	 * make sure we won't start again...
@@ -397,6 +393,24 @@ static void smbdirect_accept_negotiate_recv_work(struct work_struct *work)
 	 */
 	sp->max_fragmented_send_size = max_fragmented_size;
 
+	ntstatus = 0; /* NT_STATUS_OK */
+
+not_supported:
+	smbdirect_accept_negotiate_finish(sc, ntstatus);
+}
+
+void smbdirect_accept_negotiate_finish(struct smbdirect_socket *sc, u32 ntstatus)
+{
+	const struct smbdirect_socket_parameters *sp = &sc->parameters;
+	struct smbdirect_recv_io *recv_io;
+	struct smbdirect_send_io *send_io;
+	struct smbdirect_negotiate_resp *nrep;
+	int posted;
+	int ret;
+
+	if (ntstatus)
+		goto not_supported;
+
 	/*
 	 * Prepare for receiving data_transfer messages
 	 */
@@ -424,8 +438,6 @@ static void smbdirect_accept_negotiate_recv_work(struct work_struct *work)
 	 */
 	atomic_set(&sc->recv_io.credits.count, posted);
 
-	ntstatus = 0; /* NT_STATUS_OK */
-
 not_supported:
 	send_io = smbdirect_connection_alloc_send_io(sc);
 	if (IS_ERR(send_io)) {
diff --git a/fs/smb/common/smbdirect/smbdirect_internal.h b/fs/smb/common/smbdirect/smbdirect_internal.h
index 4cb5c8f07e8c..8a032078175c 100644
--- a/fs/smb/common/smbdirect/smbdirect_internal.h
+++ b/fs/smb/common/smbdirect/smbdirect_internal.h
@@ -139,4 +139,6 @@ int smbdirect_connection_create_mr_list(struct smbdirect_socket *sc);
 __SMBDIRECT_PRIVATE__
 void smbdirect_connection_destroy_mr_list(struct smbdirect_socket *sc);
 
+void smbdirect_accept_negotiate_finish(struct smbdirect_socket *sc, u32 ntstatus);
+
 #endif /* __FS_SMB_COMMON_SMBDIRECT_INTERNAL_H__ */
-- 
2.43.0




More information about the samba-technical mailing list