[PATCH v4 089/145] smb: client: let smbd_post_send_full_iter() get remaining_length and return data_length
Stefan Metzmacher
metze at samba.org
Tue Nov 25 17:55:35 UTC 2025
This will simplify further changes in order to share
more common code in future.
Cc: Steve French <smfrench at gmail.com>
Cc: Tom Talpey <tom at talpey.com>
Cc: Long Li <longli at microsoft.com>
Cc: Namjae Jeon <linkinjeon at kernel.org>
Cc: linux-cifs at vger.kernel.org
Cc: samba-technical at lists.samba.org
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Steve French <stfrench at microsoft.com>
---
fs/smb/client/smbdirect.c | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/fs/smb/client/smbdirect.c b/fs/smb/client/smbdirect.c
index a924d1aa4a27..1f7b31cb15af 100644
--- a/fs/smb/client/smbdirect.c
+++ b/fs/smb/client/smbdirect.c
@@ -948,9 +948,9 @@ static void smbd_post_send_empty(struct smbdirect_socket *sc)
static int smbd_post_send_full_iter(struct smbdirect_socket *sc,
struct iov_iter *iter,
- int *_remaining_data_length)
+ u32 remaining_data_length)
{
- int rc = 0;
+ int bytes = 0;
/*
* smbd_post_send_iter() respects the
@@ -959,14 +959,16 @@ static int smbd_post_send_full_iter(struct smbdirect_socket *sc,
*/
while (iov_iter_count(iter) > 0) {
- rc = smbd_post_send_iter(sc, iter, *_remaining_data_length);
+ int rc;
+
+ rc = smbd_post_send_iter(sc, iter, remaining_data_length);
if (rc < 0)
- break;
- *_remaining_data_length -= rc;
- rc = 0;
+ return rc;
+ remaining_data_length -= rc;
+ bytes += rc;
}
- return rc;
+ return bytes;
}
/* Perform SMBD negotiate according to [MS-SMBD] 3.1.5.2 */
@@ -1366,16 +1368,20 @@ int smbd_send(struct TCP_Server_Info *server,
klen += rqst->rq_iov[i].iov_len;
iov_iter_kvec(&iter, ITER_SOURCE, rqst->rq_iov, rqst->rq_nvec, klen);
- rc = smbd_post_send_full_iter(sc, &iter, &remaining_data_length);
+ rc = smbd_post_send_full_iter(sc, &iter, remaining_data_length);
if (rc < 0)
break;
+ remaining_data_length -= rc;
+ rc = 0;
if (iov_iter_count(&rqst->rq_iter) > 0) {
/* And then the data pages if there are any */
rc = smbd_post_send_full_iter(sc, &rqst->rq_iter,
- &remaining_data_length);
+ remaining_data_length);
if (rc < 0)
break;
+ remaining_data_length -= rc;
+ rc = 0;
}
} while (++rqst_idx < num_rqst);
--
2.43.0
More information about the samba-technical
mailing list