From: Stefan Metzmacher Date: Thu, 18 Sep 2025 17:52:03 +0000 (+0200) Subject: smb: server: make use of smbdirect_connection_post_recv_io() X-Git-Tag: v7.1-rc1~128^2~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=62782820e85250bc9919621aa242510d300e9093;p=thirdparty%2Fkernel%2Flinux.git smb: server: make use of smbdirect_connection_post_recv_io() The only difference is that smbdirect_connection_post_recv_io() returns early if the connection is already broken. Cc: Namjae Jeon Cc: Steve French Cc: Tom Talpey Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Signed-off-by: Stefan Metzmacher Acked-by: Namjae Jeon Signed-off-by: Steve French --- diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c index 5ddf32238fda3..17642ba35d8d7 100644 --- a/fs/smb/server/transport_rdma.c +++ b/fs/smb/server/transport_rdma.c @@ -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;