Marios Makassikis 43fb7bce88 ksmbd: fix broken transfers when exceeding max simultaneous operations
Since commit 0a77d947f599 ("ksmbd: check outstanding simultaneous SMB
operations"), ksmbd enforces a maximum number of simultaneous operations
for a connection. The problem is that reaching the limit causes ksmbd to
close the socket, and the client has no indication that it should have
slowed down.

This behaviour can be reproduced by setting "smb2 max credits = 128" (or
lower), and transferring a large file (25GB).

smbclient fails as below:

  $ smbclient //192.168.1.254/testshare -U user%pass
  smb: \> put file.bin
  cli_push returned NT_STATUS_USER_SESSION_DELETED
  putting file file.bin as \file.bin smb2cli_req_compound_submit:
  Insufficient credits. 0 available, 1 needed
  NT_STATUS_INTERNAL_ERROR closing remote file \file.bin
  smb: \> smb2cli_req_compound_submit: Insufficient credits. 0 available,
  1 needed

Windows clients fail with 0x8007003b (with smaller files even).

Fix this by delaying reading from the socket until there's room to
allocate a request. This effectively applies backpressure on the client,
so the transfer completes, albeit at a slower rate.

Fixes: 0a77d947f599 ("ksmbd: check outstanding simultaneous SMB operations")
Signed-off-by: Marios Makassikis <mmakassikis@freebox.fr>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
2024-12-15 22:20:03 -06:00
..
2024-11-01 07:37:10 -10:00
2024-12-10 18:18:01 -08:00
2024-07-15 11:14:59 -07:00
2024-11-26 13:39:02 -08:00
2024-11-25 17:08:27 +09:00
2024-09-16 09:14:02 +02:00
2024-11-26 12:50:58 -08:00
2024-10-17 00:28:06 -07:00
2024-11-27 13:11:58 -08:00
2024-11-26 12:34:50 -08:00
2024-11-18 09:35:30 -08:00
2024-11-26 18:15:06 +01:00
2024-12-05 12:31:40 +01:00
2024-11-26 12:59:30 -08:00
2024-11-30 10:17:53 -08:00
2024-11-26 12:59:30 -08:00
\n
2024-11-21 09:55:45 -08:00
2024-11-22 20:55:42 -08:00
2024-05-28 11:52:53 +02:00
2024-08-21 22:32:58 +02:00
2024-10-02 12:02:15 -07:00
2024-11-03 01:28:06 -05:00
2024-11-21 08:28:08 -08:00
2024-11-26 13:26:15 -08:00
2024-11-18 10:30:29 -08:00
2024-11-18 10:45:06 -08:00
2024-11-03 01:28:06 -05:00
2024-11-03 01:28:06 -05:00
2024-10-21 16:29:38 +02:00
2024-11-03 01:28:06 -05:00
2024-10-21 16:29:38 +02:00
2024-09-24 15:29:42 -07:00
2024-09-16 11:15:26 +02:00
2024-09-27 08:18:43 -07:00
\n
2024-11-21 09:55:45 -08:00
2024-10-24 13:54:51 +02:00
2024-09-27 08:18:43 -07:00
2024-11-03 01:28:07 -05:00
2024-11-03 01:28:07 -05:00
2024-11-03 01:28:06 -05:00
2024-11-03 01:28:06 -05:00
2024-11-03 01:28:06 -05:00
2024-11-03 01:28:06 -05:00