[PATCH 00/10] improve smbdirect_mr_io lifetime
Stefan Metzmacher
metze at samba.org
Sun Oct 12 19:10:20 UTC 2025
Hi,
these patches improve and simplify our handling of
smbdirect_mr_io structures and their lifetime.
smbd_register_mr() returns a pointer to struct smbdirect_mr_io
and smbd_deregister_mr() gives the pointer back.
But currently the memory itself is managed by the connection
(struct smbdirect_socket) and smbd_destroy() has a strange
wait loop in order to wait for smbd_deregister_mr() being
called. It means code in smbd_destroy() is aware of
the server mutex in the generic smb client handling above
the transport layer.
These patches do some cleanups and fixes before changing
the logic to use a kref and a mutex in order to allow
smbd_deregister_mr() being called after smbd_destroy()
as the memory of smbdirect_mr_io will stay in memory
but will be detached from the connection.
This makes the code independent of cifs_server_[un]lock()
and will allow us to move more smbdirect code into common
functions (shared between client and server).
I think these should go into 6.18.
Stefan Metzmacher (10):
smb: smbdirect: introduce smbdirect_mr_io.{kref,mutex} and
SMBDIRECT_MR_DISABLED
smb: client: change smbd_deregister_mr() to return void
smb: client: let destroy_mr_list() call list_del(&mr->list)
smb: client: let destroy_mr_list() remove locked from the list
smb: client: improve logic in allocate_mr_list()
smb: client: improve logic in smbd_register_mr()
smb: client: improve logic in smbd_deregister_mr()
smb: client: call ib_dma_unmap_sg if mr->sgt.nents is not 0
smb: client: let destroy_mr_list() call ib_dereg_mr() before
ib_dma_unmap_sg()
smb: client: let destroy_mr_list() keep smbdirect_mr_io memory if
registered
fs/smb/client/smbdirect.c | 312 ++++++++++++++-------
fs/smb/client/smbdirect.h | 2 +-
fs/smb/common/smbdirect/smbdirect_socket.h | 11 +-
3 files changed, 224 insertions(+), 101 deletions(-)
--
2.43.0
More information about the samba-technical
mailing list