]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
smb: server: make use of smbdirect_connection_post_recv_io()
authorStefan Metzmacher <metze@samba.org>
Thu, 18 Sep 2025 17:52:03 +0000 (19:52 +0200)
committerSteve French <stfrench@microsoft.com>
Thu, 16 Apr 2026 02:58:23 +0000 (21:58 -0500)
The only difference is that smbdirect_connection_post_recv_io()
returns early if the connection is already broken.

Cc: Namjae Jeon <linkinjeon@kernel.org>
Cc: Steve French <smfrench@gmail.com>
Cc: Tom Talpey <tom@talpey.com>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/transport_rdma.c

index 5ddf32238fda315bab35acc3c39ea3d3db34913d..17642ba35d8d7431ea541a71dc05d117f4f261e1 100644 (file)
@@ -658,41 +658,6 @@ static void smb_direct_negotiate_recv_work(struct work_struct *work)
        wake_up(&sc->status_wait);
 }
 
-static int smb_direct_post_recv(struct smbdirect_socket *sc,
-                               struct smbdirect_recv_io *recvmsg)
-{
-       struct smbdirect_socket_parameters *sp = &sc->parameters;
-       struct ib_recv_wr wr;
-       int ret;
-
-       recvmsg->sge.addr = ib_dma_map_single(sc->ib.dev,
-                                             recvmsg->packet,
-                                             sp->max_recv_size,
-                                             DMA_FROM_DEVICE);
-       ret = ib_dma_mapping_error(sc->ib.dev, recvmsg->sge.addr);
-       if (ret)
-               return ret;
-       recvmsg->sge.length = sp->max_recv_size;
-       recvmsg->sge.lkey = sc->ib.pd->local_dma_lkey;
-
-       wr.wr_cqe = &recvmsg->cqe;
-       wr.next = NULL;
-       wr.sg_list = &recvmsg->sge;
-       wr.num_sge = 1;
-
-       ret = ib_post_recv(sc->ib.qp, &wr, NULL);
-       if (ret) {
-               pr_err("Can't post recv: %d\n", ret);
-               ib_dma_unmap_single(sc->ib.dev,
-                                   recvmsg->sge.addr, recvmsg->sge.length,
-                                   DMA_FROM_DEVICE);
-               recvmsg->sge.length = 0;
-               smbdirect_socket_schedule_cleanup(sc, ret);
-               return ret;
-       }
-       return ret;
-}
-
 static int smb_direct_read(struct ksmbd_transport *t, char *buf,
                           unsigned int size, int unused)
 {
@@ -829,7 +794,7 @@ static void smb_direct_post_recv_credits(struct work_struct *work)
 
                        recvmsg->first_segment = false;
 
-                       ret = smb_direct_post_recv(sc, recvmsg);
+                       ret = smbdirect_connection_post_recv_io(recvmsg);
                        if (ret) {
                                pr_err("Can't post recv: %d\n", ret);
                                smbdirect_connection_put_recv_io(recvmsg);
@@ -1873,7 +1838,7 @@ static int smb_direct_prepare_negotiation(struct smbdirect_socket *sc)
                return -ENOMEM;
        recvmsg->cqe.done = smb_direct_negotiate_recv_done;
 
-       ret = smb_direct_post_recv(sc, recvmsg);
+       ret = smbdirect_connection_post_recv_io(recvmsg);
        if (ret) {
                pr_err("Can't post recv: %d\n", ret);
                goto out_err;