summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2025-07-18 19:44:15 +0300
committerSteve French <stfrench@microsoft.com>2026-04-16 05:58:20 +0300
commitf9a804da479cc41172f1039b4ffde06a09920506 (patch)
tree3040b2cf7950bee148e1afad59ca7cf048f20987
parentdc691b91ad1677def14582a279e56fd943b52f94 (diff)
downloadlinux-f9a804da479cc41172f1039b4ffde06a09920506.tar.xz
smb: smbdirect: introduce the basic smbdirect.ko
This exports the functions needed by cifs.ko and ksmbd.ko. It doesn't yet provide a generic socket layer, but it is a good start to introduce that on top. It will be much easier after Davids refactoring using MSG_SPLICE_PAGES, will make it easier to use the socket layer without an additional copy. Cc: Steve French <smfrench@gmail.com> Cc: Tom Talpey <tom@talpey.com> Cc: Long Li <longli@microsoft.com> Cc: Namjae Jeon <linkinjeon@kernel.org> Cc: David Howells <dhowells@redhat.com> Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Signed-off-by: Stefan Metzmacher <metze@samba.org> Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
-rw-r--r--fs/smb/Kconfig1
-rw-r--r--fs/smb/common/Makefile1
-rw-r--r--fs/smb/common/smbdirect/Kconfig9
-rw-r--r--fs/smb/common/smbdirect/Makefile17
-rw-r--r--fs/smb/common/smbdirect/smbdirect_internal.h9
-rw-r--r--fs/smb/common/smbdirect/smbdirect_main.c40
6 files changed, 77 insertions, 0 deletions
diff --git a/fs/smb/Kconfig b/fs/smb/Kconfig
index 85f7ad5fbc5e..b4b2cfdc2a6b 100644
--- a/fs/smb/Kconfig
+++ b/fs/smb/Kconfig
@@ -4,6 +4,7 @@
source "fs/smb/client/Kconfig"
source "fs/smb/server/Kconfig"
+source "fs/smb/common/smbdirect/Kconfig"
config SMBFS
tristate
diff --git a/fs/smb/common/Makefile b/fs/smb/common/Makefile
index 9e0730a385fb..e6ee65c31b5d 100644
--- a/fs/smb/common/Makefile
+++ b/fs/smb/common/Makefile
@@ -4,3 +4,4 @@
#
obj-$(CONFIG_SMBFS) += cifs_md4.o
+obj-$(CONFIG_SMB_COMMON_SMBDIRECT) += smbdirect/
diff --git a/fs/smb/common/smbdirect/Kconfig b/fs/smb/common/smbdirect/Kconfig
new file mode 100644
index 000000000000..a46a2e6ec87a
--- /dev/null
+++ b/fs/smb/common/smbdirect/Kconfig
@@ -0,0 +1,9 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# smbdirect configuration
+
+config SMB_COMMON_SMBDIRECT
+ def_tristate n
+ depends on INFINIBAND && INFINIBAND_ADDR_TRANS
+ depends on m || INFINIBAND=y
+ select SG_POOL
diff --git a/fs/smb/common/smbdirect/Makefile b/fs/smb/common/smbdirect/Makefile
new file mode 100644
index 000000000000..b41271facfc3
--- /dev/null
+++ b/fs/smb/common/smbdirect/Makefile
@@ -0,0 +1,17 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# Makefile for smbdirect support
+#
+
+obj-$(CONFIG_SMB_COMMON_SMBDIRECT) += smbdirect.o
+
+smbdirect-y := \
+ smbdirect_socket.o \
+ smbdirect_connection.o \
+ smbdirect_mr.o \
+ smbdirect_rw.o \
+ smbdirect_debug.o \
+ smbdirect_connect.o \
+ smbdirect_listen.o \
+ smbdirect_accept.o \
+ smbdirect_main.o
diff --git a/fs/smb/common/smbdirect/smbdirect_internal.h b/fs/smb/common/smbdirect/smbdirect_internal.h
index f8432c8c1a5f..901540d0cbbf 100644
--- a/fs/smb/common/smbdirect/smbdirect_internal.h
+++ b/fs/smb/common/smbdirect/smbdirect_internal.h
@@ -13,6 +13,15 @@
#include "smbdirect.h"
#include "smbdirect_pdu.h"
#include "smbdirect_public.h"
+
+#include <linux/mutex.h>
+
+struct smbdirect_module_state {
+ struct mutex mutex;
+};
+
+extern struct smbdirect_module_state smbdirect_globals;
+
#include "smbdirect_socket.h"
#ifdef SMBDIRECT_USE_INLINE_C_FILES
diff --git a/fs/smb/common/smbdirect/smbdirect_main.c b/fs/smb/common/smbdirect/smbdirect_main.c
new file mode 100644
index 000000000000..c61ae8d7f4f0
--- /dev/null
+++ b/fs/smb/common/smbdirect/smbdirect_main.c
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2025, Stefan Metzmacher
+ */
+
+#include "smbdirect_internal.h"
+#include <linux/module.h>
+
+struct smbdirect_module_state smbdirect_globals = {
+ .mutex = __MUTEX_INITIALIZER(smbdirect_globals.mutex),
+};
+
+static __init int smbdirect_module_init(void)
+{
+ pr_notice("subsystem loading...\n");
+ mutex_lock(&smbdirect_globals.mutex);
+
+ /* TODO... */
+
+ mutex_unlock(&smbdirect_globals.mutex);
+ pr_notice("subsystem loaded\n");
+ return 0;
+}
+
+static __exit void smbdirect_module_exit(void)
+{
+ pr_notice("subsystem unloading...\n");
+ mutex_lock(&smbdirect_globals.mutex);
+
+ /* TODO... */
+
+ mutex_unlock(&smbdirect_globals.mutex);
+ pr_notice("subsystem unloaded\n");
+}
+
+module_init(smbdirect_module_init);
+module_exit(smbdirect_module_exit);
+
+MODULE_DESCRIPTION("smbdirect subsystem");
+MODULE_LICENSE("GPL");