[PATCH v2] smb: client: let smbd_post_send_iter() respect the peers max_send_size and transmit all data
Steve French
smfrench at gmail.com
Wed Jun 25 16:17:59 UTC 2025
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>
>
>
--
Thanks,
Steve
More information about the samba-technical
mailing list