[GIT PULL] smbdirect ksmbd and cifs changes

From: Steve French

Date: Thu Apr 16 2026 - 11:06:43 EST


Please pull the following changes since commit
048091722259b6e8d2ef3b138b0c121a2afabe61:

Merge tag 'v7.1-rc-part1-ksmbd-srv-fixes' of
git://git.samba.org/ksmbd (2026-04-15 19:14:01 -0700)

are available in the Git repository at:

git://git.samba.org/ksmbd.git tags/v7.1-rc-part1-smbdirect-fixes

for you to fetch changes up to d09a040c186a2083b1cfa9c3c112782ce4b1f6d4:

smb: smbdirect: let smbdirect_connection_deregister_mr_io unlock
while waiting (2026-04-15 21:58:24 -0500)

----------------------------------------------------------------
Move smbdirect server and client code to common
- temporary use of smbdirect_all_c_files.c to allow micro steps
- factor out common functions into a smbdirect.ko.
- convert cifs.ko to use smbdirect.ko
- convert ksmbd.ko to use smbdirect.ko
- let smbdirect.ko use global workqueues
- move ib_client logic from ksmbd.ko into smbdirect.ko
- remove smbdirect_all_c_files.c hack again
- some locking and teardown related fixes on top
----------------------------------------------------------------
Stefan Metzmacher (145):
smb: smbdirect: introduce smbdirect_all_c_files.c
smb: smbdirect: introduce smbdirect_internal.h
smb: client: include smbdirect_all_c_files.c
smb: server: include smbdirect_all_c_files.c
smb: smbdirect: introduce smbdirect_socket.c to be filled
smb: smbdirect: introduce smbdirect_socket_prepare_create()
smb: smbdirect: introduce smbdirect_socket_set_logging()
smb: smbdirect: introduce smbdirect_socket_wake_up_all()
smb: smbdirect: introduce smbdirect_socket_cleanup_work()
smb: smbdirect: introduce
smbdirect_socket_schedule_cleanup[{_lvl,_status}]()
smb: smbdirect: introduce smbdirect_connection.c to be filled
smb: smbdirect: introduce smbdirect_connection_{get,put}_recv_io()
smb: smbdirect: introduce
smbdirect_connection_reassembly_{append,first}_recv_io()
smb: smbdirect: introduce smbdirect_connection_idle_timer_work()
smb: smbdirect: set SMBDIRECT_KEEPALIVE_NONE before
disable_delayed_work(&sc->idle.timer_work);
smb: smbdirect: introduce smbdirect_frwr_is_supported()
smb: smbdirect: introduce smbdirect_socket.{send,recv}_io.mem.gfp_mask
smb: smbdirect: introduce smbdirect_connection_{alloc,free}_send_io()
smb: smbdirect: introduce smbdirect_connection_send_io_done()
smb: smbdirect: introduce
smbdirect_connection_{create,destroy}_mem_pools()
smb: smbdirect: introduce smbdirect_map_sges_from_iter() and
helper functions
smb: smbdirect: introduce smbdirect_connection_qp_event_handler()
smb: smbdirect: introduce smbdirect_connection_negotiate_rdma_resources()
smb: smbdirect: introduce smbdirect_connection_{create,destroy}_qp()
smb: smbdirect: introduce smbdirect_connection_post_recv_io()
smb: smbdirect: introduce smbdirect_connection_recv_io_refill_work()
smb: smbdirect: split out smbdirect_connection_recv_io_refill()
smb: smbdirect: introduce smbdirect_get_buf_page_count()
smb: smbdirect: introduce smbdirect_socket_wait_for_credits()
smb: smbdirect: introduce smbdirect_mr.c with client mr code
smb: smbdirect: introduce smbdirect_rw.c with server rw code
smb: smbdirect: define SMBDIRECT_MIN_{RECEIVE,FRAGMENTED}_SIZE
smb: smbdirect: define SMBDIRECT_RDMA_CM_[RNR_]RETRY
smb: smbdirect: introduce smbdirect_connection_recv_io_done()
smb: smbdirect: introduce smbdirect_socket_destroy[_sync]()
smb: smbdirect: introduce
smbdirect_connection_rdma_{established,event_handler}()
smb: smbdirect: introduce smbdirect_connection_recvmsg()
smb: smbdirect: introduce smbdirect_connection_grant_recv_credits()
smb: smbdirect: introduce smbdirect_connection_request_keep_alive()
smb: smbdirect: introduce smbdirect_connection_send_iter() and
related functions
smb: smbdirect: introduce smbdirect_connection_send_immediate_work()
smb: smbdirect: introduce smbdirect_connection_negotiation_done()
smb: smbdirect: introduce smbdirect_mr_io_fill_buffer_descriptor()
smb: smbdirect: introduce smbdirect_connection_legacy_debug_proc_show()
smb: smbdirect: introduce smbdirect_connection_wait_for_connected()
smb: smbdirect: introduce smbdirect_connection_is_connected()
smb: smbdirect: introduce smbdirect_socket_shutdown()
smb: smbdirect: introduce
smbdirect_socket_init_{new,accepting}() and helpers
smb: smbdirect: let smbdirect_socket_set_initial_parameters()
call rdma_restrict_node_type()
smb: smbdirect: introduce smbdirect_connect[_sync]()
smb: smbdirect: introduce smbdirect_accept_connect_request()
smb: smbdirect: introduce
smbdirect_socket_create_{kern,accepting}() and
smbdirect_socket_release()
smb: smbdirect: let smbdirect_socket.h include all headers for
used structures
smb: smbdirect: let smbdirect_internal.h define pr_fmt without
SMBDIRECT_USE_INLINE_C_FILES
smb: smbdirect: introduce smbdirect_public.h with prototypes
smb: smbdirect: provide explicit prototypes for cross .c file functions
smb: smbdirect: introduce smbdirect_init_send_batch_storage()
smb: smbdirect: split out smbdirect_accept_negotiate_finish()
smb: smbdirect: introduce smbdirect_socket_bind()
smb: smbdirect: introduce smbdirect_socket_{listen,accept}()
smb: smbdirect: introduce the basic smbdirect.ko
smb: client: make use of smbdirect_socket_prepare_create()
smb: client: make use of smbdirect_socket_set_logging()
smb: client: make use of smbdirect_socket_wake_up_all()
smb: client: make use of smbdirect_socket_cleanup_work()
smb: client: make use of smbdirect_socket_schedule_cleanup()
smb: client: make use of smbdirect_connection_{get,put}_recv_io()
smb: client: make use of
smbdirect_connection_reassembly_{append,first}_recv_io()
smb: client: make use of smbdirect_connection_idle_timer_work()
smb: client: make use of smbdirect_frwr_is_supported()
smb: client: make use of smbdirect_connection_{alloc,free}_send_io()
smb: client: make use of smbdirect_connection_send_io_done()
smb: client: make use of smbdirect_connection_{create,destroy}_mem_pools()
smb: client: make use of smbdirect_map_sges_from_iter()
smb: client: make use of smbdirect_connection_qp_event_handler()
smb: client: make use of smbdirect_connection_negotiate_rdma_resources()
smb: client: make use of smbdirect_connection_{create,destroy}_qp()
smb: client: initialize recv_io->cqe.done = recv_done just once
smb: client: make use of smbdirect_connection_post_recv_io()
smb: client: make use of smbdirect_connection_recv_io_refill_work()
smb: client: make use of functions from smbdirect_mr.c
smb: client: make use of smbdirect_socket_destroy_sync()
smb: client: make use of smbdirect_connection_recvmsg()
smb: client: make use of smbdirect_connection_grant_recv_credits()
smb: client: make use of smbdirect_connection_request_keep_alive()
smb: client: change smbd_post_send_empty() to void return
smb: client: let smbd_post_send_iter() get remaining_length and
return data_length
smb: client: let smbd_post_send_full_iter() get remaining_length
and return data_length
smb: client: make use of
smbdirect_connection_send_{single_iter,immediate_work}()
smb: client: introduce and use smbd_mr_fill_buffer_descriptor()
smb: client: introduce and use smbd_debug_proc_show()
smb: client: make use of smbdirect_socket_init_new() and
smbdirect_connect_sync()
smb: client: make use of
smbdirect_socket_create_kern()/smbdirect_socket_release()
smb: client: only use public smbdirect functions
smb: client: make use of smbdirect.ko
smb: server: make use of smbdirect_socket_prepare_create()
smb: server: make use of smbdirect_socket_set_logging()
smb: server: make use of smbdirect_socket_wake_up_all()
smb: server: make use of smbdirect_socket_cleanup_work()
smb: server: make use of smbdirect_socket_schedule_cleanup()
smb: server: make use of smbdirect_connection_{get,put}_recv_io()
smb: server: make use of
smbdirect_connection_reassembly_{append,first}_recv_io()
smb: server: make use of smbdirect_connection_idle_timer_work()
smb: server: make use of smbdirect_frwr_is_supported()
smb: server: make use of smbdirect_connection_{alloc,free}_send_io()
smb: server: make use of smbdirect_connection_send_io_done()
smb: server: make use of smbdirect_connection_{create,destroy}_mem_pools()
smb: server: make use of smbdirect_map_sges_from_iter()
smb: server: make use of smbdirect_connection_qp_event_handler()
smb: server: make use of smbdirect_connection_negotiate_rdma_resources()
smb: server: make use of smbdirect_connection_{create,destroy}_qp()
smb: server: make use of smbdirect_connection_post_recv_io()
smb: server: make use of smbdirect_connection_recv_io_refill[_work]()
smb: server: make use of smbdirect_get_buf_page_count()
smb: server: make use of smbdirect_socket_wait_for_credits()
smb: server: make use of functions from smbdirect_rw.c
smb: server: make use of smbdirect_socket_destroy_sync()
smb: server: make use of smbdirect_connection_recvmsg()
smb: server: make use of smbdirect_connection_grant_recv_credits()
smb: server: make use of smbdirect_connection_request_keep_alive()
smb: server: move iov_iter_kvec() out of smb_direct_post_send_data()
smb: server: inline smb_direct_create_header() into
smb_direct_post_send_data()
smb: server: let smbdirect_map_sges_from_iter() truncate the
message boundary
smb: server: split out smb_direct_send_iter() out of smb_direct_writev()
smb: server: let smb_direct_post_send_data() return data_length
smb: server: make use of smbdirect_connection_send_iter() and
related functions
smb: server: make use of
smbdirect_{socket_init_accepting,connection_wait_for_connected}()
smb: server: make use of
smbdirect_socket_create_accepting()/smbdirect_socket_release()
smb: server: only use public smbdirect functions
smb: server: make use of smbdirect_socket_{listen,accept}()
smb: server: remove unused ksmbd_transport_ops.prepare()
smb: server: make use of smbdirect.ko
smb: smbdirect: introduce smbdirect_netdev_rdma_capable_mode_type()
smb: server: make use of smbdirect_netdev_rdma_capable_mode_type()
smb: smbdirect: wrap rdma_disconnect() in rdma_[un]lock_handler()
smb: smbdirect: remove unused smbdirect_connection_mr_io_recovery_work()
smb: smbdirect: prepare use of dedicated workqueues for different steps
smb: smbdirect: introduce global workqueues
smb: client: no longer use smbdirect_socket_set_custom_workqueue()
smb: server: no longer use smbdirect_socket_set_custom_workqueue()
smb: smbdirect: remove unused SMBDIRECT_USE_INLINE_C_FILES logic
smb: smbdirect: change
smbdirect_socket_parameters.{initiator_depth,responder_resources} to
__u16
smb: smbdirect: fix copyright header of smbdirect.h
smb: smbdirect: fix the logic in smbdirect_socket_destroy_sync()
without an error
smb: smbdirect: let smbdirect_connection_deregister_mr_io unlock
while waiting

fs/smb/Kconfig | 1 +
fs/smb/client/Kconfig | 4 +-
fs/smb/client/cifs_debug.c | 67 +-
fs/smb/client/smb2pdu.c | 9 +-
fs/smb/client/smbdirect.c | 3356 ++----------------------
fs/smb/client/smbdirect.h | 19 +-
fs/smb/common/Makefile | 1 +
fs/smb/common/smbdirect/Kconfig | 9 +
fs/smb/common/smbdirect/Makefile | 18 +
fs/smb/common/smbdirect/smbdirect.h | 14 +-
fs/smb/common/smbdirect/smbdirect_accept.c | 857 ++++++
fs/smb/common/smbdirect/smbdirect_connect.c | 925 +++++++
fs/smb/common/smbdirect/smbdirect_connection.c | 2181 +++++++++++++++
fs/smb/common/smbdirect/smbdirect_debug.c | 88 +
fs/smb/common/smbdirect/smbdirect_devices.c | 277 ++
fs/smb/common/smbdirect/smbdirect_internal.h | 141 +
fs/smb/common/smbdirect/smbdirect_listen.c | 308 +++
fs/smb/common/smbdirect/smbdirect_main.c | 121 +
fs/smb/common/smbdirect/smbdirect_mr.c | 493 ++++
fs/smb/common/smbdirect/smbdirect_pdu.h | 4 +
fs/smb/common/smbdirect/smbdirect_public.h | 148 ++
fs/smb/common/smbdirect/smbdirect_rw.c | 255 ++
fs/smb/common/smbdirect/smbdirect_socket.c | 743 ++++++
fs/smb/common/smbdirect/smbdirect_socket.h | 183 +-
fs/smb/server/Kconfig | 5 +-
fs/smb/server/connection.c | 5 -
fs/smb/server/connection.h | 1 -
fs/smb/server/smb2pdu.c | 1 -
fs/smb/server/transport_rdma.c | 3172 +++-------------------
fs/smb/server/transport_rdma.h | 4 +-
30 files changed, 7353 insertions(+), 6057 deletions(-)
create mode 100644 fs/smb/common/smbdirect/Kconfig
create mode 100644 fs/smb/common/smbdirect/Makefile
create mode 100644 fs/smb/common/smbdirect/smbdirect_accept.c
create mode 100644 fs/smb/common/smbdirect/smbdirect_connect.c
create mode 100644 fs/smb/common/smbdirect/smbdirect_connection.c
create mode 100644 fs/smb/common/smbdirect/smbdirect_debug.c
create mode 100644 fs/smb/common/smbdirect/smbdirect_devices.c
create mode 100644 fs/smb/common/smbdirect/smbdirect_internal.h
create mode 100644 fs/smb/common/smbdirect/smbdirect_listen.c
create mode 100644 fs/smb/common/smbdirect/smbdirect_main.c
create mode 100644 fs/smb/common/smbdirect/smbdirect_mr.c
create mode 100644 fs/smb/common/smbdirect/smbdirect_public.h
create mode 100644 fs/smb/common/smbdirect/smbdirect_rw.c
create mode 100644 fs/smb/common/smbdirect/smbdirect_socket.c

--
Thanks,

Steve