[PATCH v2] smb: client: let smbd_post_send_iter() respect the peers max_send_size and transmit all data
Tom Talpey
tom at talpey.com
Wed Jun 25 16:53:01 UTC 2025
LGTM
Reviewed-by: Tom Talpey <tom at talpey.com>
It appears that the "type 2 code 2" terminate packet the client is
receiving is actually incorrect, it should be a "type 2 code 5" to
properly indicate the length error. The siw maintainer suggests I
send a patch, which I'll do.
Metze - the samba.org server is rejecting me as a spammer based on
some sort of IP address blacklist. I don't have any way to fix that,
so I'm sorry if you only see my replies on the list.
Tom.
On 6/25/2025 12:17 PM, Steve French wrote:
> Added to cifs-2.6.git for-next and updated with rb and tested-by from
> David and tested-by from Meetakshi
>
> On Wed, Jun 25, 2025 at 4:03 AM David Howells <dhowells at redhat.com> wrote:
>>
>> Stefan Metzmacher <metze at samba.org> wrote:
>>
>>> We should not send smbdirect_data_transfer messages larger than
>>> the negotiated max_send_size, typically 1364 bytes, which means
>>> 24 bytes of the smbdirect_data_transfer header + 1340 payload bytes.
>>>
>>> This happened when doing an SMB2 write with more than 1340 bytes
>>> (which is done inline as it's below rdma_readwrite_threshold).
>>>
>>> It means the peer resets the connection.
>>>
>>> When testing between cifs.ko and ksmbd.ko something like this
>>> is logged:
>>>
>>> client:
>>>
>>> CIFS: VFS: RDMA transport re-established
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>> CIFS: VFS: \\carina Send error in SessSetup = -11
>>> smb2_reconnect: 12 callbacks suppressed
>>> CIFS: VFS: reconnect tcon failed rc = -11
>>> CIFS: VFS: reconnect tcon failed rc = -11
>>> CIFS: VFS: reconnect tcon failed rc = -11
>>> CIFS: VFS: SMB: Zero rsize calculated, using minimum value 65536
>>>
>>> and:
>>>
>>> CIFS: VFS: RDMA transport re-established
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>> CIFS: VFS: smbd_recv:1894 disconnected
>>> siw: got TERMINATE. layer 1, type 2, code 2
>>>
>>> The ksmbd dmesg is showing things like:
>>>
>>> smb_direct: Recv error. status='local length error (1)' opcode=128
>>> smb_direct: disconnected
>>> smb_direct: Recv error. status='local length error (1)' opcode=128
>>> ksmbd: smb_direct: disconnected
>>> ksmbd: sock_read failed: -107
>>>
>>> As smbd_post_send_iter() limits the transmitted number of bytes
>>> we need loop over it in order to transmit the whole iter.
>>>
>>> Cc: Steve French <sfrench at samba.org>
>>> Cc: David Howells <dhowells at redhat.com>
>>> Cc: Tom Talpey <tom at talpey.com>
>>> Cc: linux-cifs at vger.kernel.org
>>> Cc: <stable+noautosel at kernel.org> # sp->max_send_size should be info->max_send_size in backports
>>> Fixes: 3d78fe73fa12 ("cifs: Build the RDMA SGE list directly from an iterator")
>>> Signed-off-by: Stefan Metzmacher <metze at samba.org>
>>
>> Reviewed-by: David Howells <dhowells at redhat.com>
>> Tested-by: David Howells <dhowells at redhat.com>
>>
>>
>
>
More information about the samba-technical
mailing list