]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
smb: client: split out smbd_ib_post_send()
authorStefan Metzmacher <metze@samba.org>
Thu, 22 Jan 2026 17:16:54 +0000 (18:16 +0100)
committerSteve French <stfrench@microsoft.com>
Sun, 8 Feb 2026 23:12:58 +0000 (17:12 -0600)
This is like smb_direct_post_send() in the server
and will simplify porting the smbdirect_send_batch
and credit related logic from the server.

Cc: <stable@vger.kernel.org> # 6.18.x
Cc: Steve French <smfrench@gmail.com>
Cc: Tom Talpey <tom@talpey.com>
Cc: Long Li <longli@microsoft.com>
Cc: Namjae Jeon <linkinjeon@kernel.org>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/smbdirect.c

index 405931ce3978f483b90707eeaf6afc925f1a99cd..75c0ac9cc65c73d806f0d365589b665c099da43b 100644 (file)
@@ -1101,11 +1101,26 @@ static int manage_keep_alive_before_sending(struct smbdirect_socket *sc)
        return 0;
 }
 
+static int smbd_ib_post_send(struct smbdirect_socket *sc,
+                            struct ib_send_wr *wr)
+{
+       int ret;
+
+       atomic_inc(&sc->send_io.pending.count);
+       ret = ib_post_send(sc->ib.qp, wr, NULL);
+       if (ret) {
+               pr_err("failed to post send: %d\n", ret);
+               smbd_disconnect_rdma_connection(sc);
+               ret = -EAGAIN;
+       }
+       return ret;
+}
+
 /* Post the send request */
 static int smbd_post_send(struct smbdirect_socket *sc,
                struct smbdirect_send_io *request)
 {
-       int rc, i;
+       int i;
 
        for (i = 0; i < request->num_sge; i++) {
                log_rdma_send(INFO,
@@ -1126,15 +1141,7 @@ static int smbd_post_send(struct smbdirect_socket *sc,
        request->wr.num_sge = request->num_sge;
        request->wr.opcode = IB_WR_SEND;
        request->wr.send_flags = IB_SEND_SIGNALED;
-
-       rc = ib_post_send(sc->ib.qp, &request->wr, NULL);
-       if (rc) {
-               log_rdma_send(ERR, "ib_post_send failed rc=%d\n", rc);
-               smbd_disconnect_rdma_connection(sc);
-               rc = -EAGAIN;
-       }
-
-       return rc;
+       return smbd_ib_post_send(sc, &request->wr);
 }
 
 static int wait_for_credits(struct smbdirect_socket *sc,
@@ -1280,12 +1287,6 @@ static int smbd_post_send_iter(struct smbdirect_socket *sc,
                     le32_to_cpu(packet->data_length),
                     le32_to_cpu(packet->remaining_data_length));
 
-       /*
-        * Now that we got a local and a remote credit
-        * we add us as pending
-        */
-       atomic_inc(&sc->send_io.pending.count);
-
        rc = smbd_post_send(sc, request);
        if (!rc)
                return 0;