From: Stefan Metzmacher Date: Wed, 6 Aug 2025 17:35:59 +0000 (+0200) Subject: smb: server: make use of struct smbdirect_recv_io X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=9883a142f1bba5bdc3a3091608aef8b1600cdd11;p=users%2Fjedix%2Flinux-maple.git smb: server: make use of struct smbdirect_recv_io This will allow us to move helper functions into common code soon as the client already uses smbdirect_recv_io. 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 7892dd634c82..c4e786f2e7e7 100644 --- a/fs/smb/server/transport_rdma.c +++ b/fs/smb/server/transport_rdma.c @@ -165,15 +165,6 @@ struct smb_direct_sendmsg { u8 packet[]; }; -struct smb_direct_recvmsg { - struct smb_direct_transport *transport; - struct list_head list; - struct ib_sge sge; - struct ib_cqe cqe; - bool first_segment; - u8 packet[]; -}; - struct smb_direct_rdma_rw_msg { struct smb_direct_transport *t; struct ib_cqe cqe; @@ -216,7 +207,7 @@ smb_trans_direct_transfort(struct ksmbd_transport *t) } static inline void -*smb_direct_recvmsg_payload(struct smb_direct_recvmsg *recvmsg) +*smbdirect_recv_io_payload(struct smbdirect_recv_io *recvmsg) { return (void *)recvmsg->packet; } @@ -229,14 +220,14 @@ static inline bool is_receive_credit_post_required(int receive_credits, } static struct -smb_direct_recvmsg *get_free_recvmsg(struct smb_direct_transport *t) +smbdirect_recv_io *get_free_recvmsg(struct smb_direct_transport *t) { - struct smb_direct_recvmsg *recvmsg = NULL; + struct smbdirect_recv_io *recvmsg = NULL; spin_lock(&t->recvmsg_queue_lock); if (!list_empty(&t->recvmsg_queue)) { recvmsg = list_first_entry(&t->recvmsg_queue, - struct smb_direct_recvmsg, + struct smbdirect_recv_io, list); list_del(&recvmsg->list); } @@ -245,7 +236,7 @@ smb_direct_recvmsg *get_free_recvmsg(struct smb_direct_transport *t) } static void put_recvmsg(struct smb_direct_transport *t, - struct smb_direct_recvmsg *recvmsg) + struct smbdirect_recv_io *recvmsg) { struct smbdirect_socket *sc = &t->socket; @@ -263,7 +254,7 @@ static void put_recvmsg(struct smb_direct_transport *t, } static void enqueue_reassembly(struct smb_direct_transport *t, - struct smb_direct_recvmsg *recvmsg, + struct smbdirect_recv_io *recvmsg, int data_length) { spin_lock(&t->reassembly_queue_lock); @@ -280,11 +271,11 @@ static void enqueue_reassembly(struct smb_direct_transport *t, spin_unlock(&t->reassembly_queue_lock); } -static struct smb_direct_recvmsg *get_first_reassembly(struct smb_direct_transport *t) +static struct smbdirect_recv_io *get_first_reassembly(struct smb_direct_transport *t) { if (!list_empty(&t->reassembly_queue)) return list_first_entry(&t->reassembly_queue, - struct smb_direct_recvmsg, list); + struct smbdirect_recv_io, list); else return NULL; } @@ -387,7 +378,7 @@ static void smb_direct_free_transport(struct ksmbd_transport *kt) static void free_transport(struct smb_direct_transport *t) { struct smbdirect_socket *sc = &t->socket; - struct smb_direct_recvmsg *recvmsg; + struct smbdirect_recv_io *recvmsg; wake_up_interruptible(&t->wait_send_credits); @@ -465,9 +456,9 @@ static void smb_direct_free_sendmsg(struct smb_direct_transport *t, mempool_free(msg, t->sendmsg_mempool); } -static int smb_direct_check_recvmsg(struct smb_direct_recvmsg *recvmsg) +static int smb_direct_check_recvmsg(struct smbdirect_recv_io *recvmsg) { - struct smbdirect_socket *sc = &recvmsg->transport->socket; + struct smbdirect_socket *sc = recvmsg->socket; switch (sc->recv_io.expected) { case SMBDIRECT_EXPECT_DATA_TRANSFER: { @@ -516,15 +507,15 @@ static int smb_direct_check_recvmsg(struct smb_direct_recvmsg *recvmsg) static void recv_done(struct ib_cq *cq, struct ib_wc *wc) { - struct smb_direct_recvmsg *recvmsg; + struct smbdirect_recv_io *recvmsg; struct smb_direct_transport *t; struct smbdirect_socket *sc; struct smbdirect_socket_parameters *sp; - recvmsg = container_of(wc->wr_cqe, struct smb_direct_recvmsg, cqe); - t = recvmsg->transport; - sc = &t->socket; + recvmsg = container_of(wc->wr_cqe, struct smbdirect_recv_io, cqe); + sc = recvmsg->socket; sp = &sc->parameters; + t = container_of(sc, struct smb_direct_transport, socket); if (wc->status != IB_WC_SUCCESS || wc->opcode != IB_WC_RECV) { put_recvmsg(t, recvmsg); @@ -645,7 +636,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc) } static int smb_direct_post_recv(struct smb_direct_transport *t, - struct smb_direct_recvmsg *recvmsg) + struct smbdirect_recv_io *recvmsg) { struct smbdirect_socket *sc = &t->socket; struct smbdirect_socket_parameters *sp = &sc->parameters; @@ -684,7 +675,7 @@ static int smb_direct_post_recv(struct smb_direct_transport *t, static int smb_direct_read(struct ksmbd_transport *t, char *buf, unsigned int size, int unused) { - struct smb_direct_recvmsg *recvmsg; + struct smbdirect_recv_io *recvmsg; struct smbdirect_data_transfer *data_transfer; int to_copy, to_read, data_read, offset; u32 data_length, remaining_data_length, data_offset; @@ -721,7 +712,7 @@ again: offset = st->first_entry_offset; while (data_read < size) { recvmsg = get_first_reassembly(st); - data_transfer = smb_direct_recvmsg_payload(recvmsg); + data_transfer = smbdirect_recv_io_payload(recvmsg); data_length = le32_to_cpu(data_transfer->data_length); remaining_data_length = le32_to_cpu(data_transfer->remaining_data_length); @@ -813,7 +804,7 @@ static void smb_direct_post_recv_credits(struct work_struct *work) { struct smb_direct_transport *t = container_of(work, struct smb_direct_transport, post_recv_credits_work); - struct smb_direct_recvmsg *recvmsg; + struct smbdirect_recv_io *recvmsg; int receive_credits, credits = 0; int ret; @@ -1746,7 +1737,7 @@ static int smb_direct_prepare_negotiation(struct smb_direct_transport *t) { struct smbdirect_socket *sc = &t->socket; int ret; - struct smb_direct_recvmsg *recvmsg; + struct smbdirect_recv_io *recvmsg; sc->recv_io.expected = SMBDIRECT_EXPECT_NEGOTIATE_REQ; @@ -1880,7 +1871,7 @@ static int smb_direct_init_params(struct smb_direct_transport *t, static void smb_direct_destroy_pools(struct smb_direct_transport *t) { - struct smb_direct_recvmsg *recvmsg; + struct smbdirect_recv_io *recvmsg; while ((recvmsg = get_free_recvmsg(t))) mempool_free(recvmsg, t->recvmsg_mempool); @@ -1904,7 +1895,7 @@ static int smb_direct_create_pools(struct smb_direct_transport *t) struct smbdirect_socket_parameters *sp = &sc->parameters; char name[80]; int i; - struct smb_direct_recvmsg *recvmsg; + struct smbdirect_recv_io *recvmsg; snprintf(name, sizeof(name), "smb_direct_rqst_pool_%p", t); t->sendmsg_cache = kmem_cache_create(name, @@ -1920,9 +1911,9 @@ static int smb_direct_create_pools(struct smb_direct_transport *t) if (!t->sendmsg_mempool) goto err; - snprintf(name, sizeof(name), "smb_direct_resp_%p", t); + snprintf(name, sizeof(name), "smbdirect_recv_io_pool_%p", t); t->recvmsg_cache = kmem_cache_create(name, - sizeof(struct smb_direct_recvmsg) + + sizeof(struct smbdirect_recv_io) + sp->max_recv_size, 0, SLAB_HWCACHE_ALIGN, NULL); if (!t->recvmsg_cache) @@ -1940,7 +1931,7 @@ static int smb_direct_create_pools(struct smb_direct_transport *t) recvmsg = mempool_alloc(t->recvmsg_mempool, KSMBD_DEFAULT_GFP); if (!recvmsg) goto err; - recvmsg->transport = t; + recvmsg->socket = sc; recvmsg->sge.length = 0; list_add(&recvmsg->list, &t->recvmsg_queue); } @@ -2045,7 +2036,7 @@ static int smb_direct_prepare(struct ksmbd_transport *t) struct smb_direct_transport *st = smb_trans_direct_transfort(t); struct smbdirect_socket *sc = &st->socket; struct smbdirect_socket_parameters *sp = &sc->parameters; - struct smb_direct_recvmsg *recvmsg; + struct smbdirect_recv_io *recvmsg; struct smbdirect_negotiate_req *req; int ret;