]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
smb: smbdirect: introduce smbdirect_socket.send_io.lcredits.*
authorStefan Metzmacher <metze@samba.org>
Mon, 20 Oct 2025 18:35:58 +0000 (20:35 +0200)
committerSteve French <stfrench@microsoft.com>
Thu, 23 Oct 2025 01:10:19 +0000 (20:10 -0500)
commit68335cbcddcd586b59820e6d484652ad62343112
treeacf6f25b17213af666f61afca67558ffcc28fb67
parent0bd73ae09ba1b73137d0830b21820d24700e09b1
smb: smbdirect: introduce smbdirect_socket.send_io.lcredits.*

This will be used to implement a logic in order to make sure
we don't overflow the send submission queue for ib_post_send().

We will initialize the local credits with the
fixed sp->send_credit_target value, which matches
the reserved slots in the submission queue for ib_post_send().

We will be a local credit first and then wait for a remote credit,
if we managed to get both we are allowed to post an
IB_WR_SEND[_WITH_INV]. The local credit is given back to
the pool when we get the local ib_post_send() completion,
while remote credits are granted by the peer.

From reading the git history of the linux smbdirect
implementations in client and server) it was seen
that a peer granted more credits than we requested.
I guess that only happened because of bugs in our
implementation which was active as client and server.
I guess Windows won't do that.

So the local credits make sure we only use the amount
of credits we asked for.

The client already has some logic for this based on
smbdirect_socket.send_io.pending.count, but that
counts in the order direction and makes it complex it
share common logic for various credits classes.
That logic will be replaced soon.

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: 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>
fs/smb/common/smbdirect/smbdirect_socket.h