[PATCH v2] smb: client: let smbd_post_send_iter() respect the peers max_send_size and transmit all data
David Howells
dhowells at redhat.com
Wed Jun 25 09:01:38 UTC 2025
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