--- /dev/null
+# 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
--- /dev/null
+# 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
#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
--- /dev/null
+// 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");