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 + +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 + +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");