From: Stefan Metzmacher <metze@samba.org>
To: Namjae Jeon <linkinjeon@kernel.org>
Cc: Tom Talpey <tom@talpey.com>,
"linux-cifs@vger.kernel.org" <linux-cifs@vger.kernel.org>,
"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>
Subject: Re: Problem with smbdirect rw credits and initiator_depth
Date: Sat, 17 Jan 2026 14:15:02 +0100 [thread overview]
Message-ID: <84554ae8-574c-4476-88df-ed9cfcc347f5@samba.org> (raw)
In-Reply-To: <8b4cc986-cf06-42a9-ab5d-8b35615fa809@samba.org>
Am 17.01.26 um 00:08 schrieb Stefan Metzmacher:
> Am 15.01.26 um 10:50 schrieb Stefan Metzmacher:
>> Am 15.01.26 um 03:01 schrieb Namjae Jeon:
>>> On Thu, Jan 15, 2026 at 3:13 AM Stefan Metzmacher <metze@samba.org> wrote:
>>>>
>>>> Am 15.12.25 um 21:17 schrieb Stefan Metzmacher:
>>>>> Am 14.12.25 um 23:56 schrieb Stefan Metzmacher:
>>>>>> Am 13.12.25 um 03:14 schrieb Namjae Jeon:
>>>>>>>> I've put these changes a long with rw credit fixes into my
>>>>>>>> for-6.18/ksmbd-smbdirect-regression-v4 branch, are you able to
>>>>>>>> test this?
>>>>>>> Problems still occur. See:
>>>>>>
>>>>>> :-( Would you be able to use rxe and cake a network capture?
>>>>>>
>>>>>> Using test files with all zeros, e.g.
>>>>>> dd if=/dev/zero of=/tmp/4096MBzeros-sparse.dat seek=4096MB bs=1 count=1
>>>>>> would allow gzip --best on the capture file to compress well...
>>>>>
>>>>> I think I found something that explains it and
>>>>> I was able to reproduce and what I have in mind.
>>>>>
>>>>> We increment recv_io.posted.count after ib_post_recv()
>>>>>
>>>>> And manage_credits_prior_sending() uses
>>>>>
>>>>> new_credits = recv_io.posted.count - recv_io.credits.count
>>>>>
>>>>> But there is a race between the hardware receiving a message
>>>>> and recv_done being called in order to decrement recv_io.posted.count
>>>>> again. During that race manage_credits_prior_sending() might grant
>>>>> too much credits.
>>>>>
>>>>> Please test my for-6.18/ksmbd-smbdirect-regression-v5 branch,
>>>>> I haven't tested this branch yet, I'm running out of time
>>>>> for the day.
>>>>>
>>>>> But I tested it with smbclient and having a similar
>>>>> logic in fs/smb/common/smbdirect/smbdirect_connection.c
>>>>
>>>> I was able to reproduce the problem and the fix I created
>>>> for-6.18/ksmbd-smbdirect-regression-v5 was not correct.
>>>>
>>>> I needed to use
>>>>
>>>> available = atomic_xchg(&sc->recv_io.credits.available, 0);
>>>>
>>>> instead of
>>>>
>>>> available = atomic_read(&sc->recv_io.credits.available);
>>>> atomic_sub(new_credits, &sc->recv_io.credits.available);
>>>>
>>>> This following branch works for me:
>>>> for-6.18/ksmbd-smbdirect-regression-v7
>>>> and with the fixes again master this should also work:
>>>> for-6.19/ksmbd-smbdirect-regression-v1
>>>>
>>>> I'll post real patches tomorrow.
>>>>
>>>> Please check.
>>> Okay, I will test it with two branches.
>>> I'll try it too, but I recommend running frametest for performance
>>> difference and stress testing.
>>>
>>> https://support.dvsus.com/hc/en-us/articles/212925466-How-to-use-frametest
>>>
>>> ex) frametest.exe -w 4k -t 20 -n 2000
>>
>> That works fine, but
>>
>> frametest.exe -r 4k -t 20 -n 2000
>>
>> generates a continues stream of such messages:
>> ksmbd: Failed to send message: -107
>>
>> Both with 6.17.2 and for-6.19/ksmbd-smbdirect-regression-v1,
>> so this is not a regression.
>>
>> I'll now check if the is related to the other problems
>> I found and fixes in for-6.18/ksmbd-smbdirect-regression-v5
>
> Ok, I found the problem.
>
> On send we are not allowed to consume the last send credit
> without granting any credit to the peer.
>
> MS-SMBD 3.1.5.1 Sending Upper Layer Messages
>
> ...
> If Connection.SendCredits is 1 and the CreditsGranted field of the message is 0, stop
> processing.
> ...
>
> MS-SMBD 3.1.5.9 Managing Credits Prior to Sending
>
> ...
> If Connection.ReceiveCredits is zero, or if Connection.SendCredits is one and the
> Connection.SendQueue is not empty, the sender MUST allocate and post at least one receive of size
> Connection.MaxReceiveSize and MUST increment Connection.ReceiveCredits by the number
> allocated and posted. If no receives are posted, the processing MUST return a value of zero to indicate
> to the caller that no Send message can be currently performed.
> ...
>
> It works in my master-ipproto-smbdirect branch, see the top commit.
>
> I'll backport the related logic to ksmbd on top of
> for-6.19/ksmbd-smbdirect-regression-v1 tomorrow.
for-6.19/ksmbd-smbdirect-regression-v2 has the fixes and works for
me, I'll prepare official patches (most likely) on Monday.
metze
next prev parent reply other threads:[~2026-01-17 13:15 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-03 18:18 Problem with smbdirect rw credits and initiator_depth Stefan Metzmacher
2025-12-04 0:07 ` Namjae Jeon
2025-12-04 9:39 ` Stefan Metzmacher
2025-12-05 2:33 ` Namjae Jeon
2025-12-05 12:21 ` Namjae Jeon
2025-12-08 16:13 ` Stefan Metzmacher
2025-12-10 16:42 ` Stefan Metzmacher
2025-12-11 19:38 ` Stefan Metzmacher
2025-12-12 9:58 ` Stefan Metzmacher
2025-12-12 15:35 ` Stefan Metzmacher
2025-12-13 2:14 ` Namjae Jeon
2025-12-14 22:56 ` Stefan Metzmacher
2025-12-15 20:17 ` Stefan Metzmacher
2025-12-16 23:59 ` Namjae Jeon
2026-01-14 18:13 ` Stefan Metzmacher
2026-01-15 2:01 ` Namjae Jeon
2026-01-15 9:50 ` Stefan Metzmacher
2026-01-16 23:08 ` Stefan Metzmacher
2026-01-17 13:15 ` Stefan Metzmacher [this message]
2026-01-18 8:03 ` Namjae Jeon
2026-01-19 17:28 ` Stefan Metzmacher
2026-01-19 19:17 ` Stefan Metzmacher
2025-12-08 16:02 ` Stefan Metzmacher
2025-12-04 9:57 ` Stefan Metzmacher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=84554ae8-574c-4476-88df-ed9cfcc347f5@samba.org \
--to=metze@samba.org \
--cc=linkinjeon@kernel.org \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=tom@talpey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox