]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
smb: server: make use of smbdirect_socket.{send,recv}_io.mem.{cache,pool}
authorStefan Metzmacher <metze@samba.org>
Wed, 6 Aug 2025 17:36:04 +0000 (19:36 +0200)
committerSteve French <stfrench@microsoft.com>
Sun, 28 Sep 2025 23:29:51 +0000 (18:29 -0500)
This will allow common helper functions to be created later.

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 b4951ecf5c88b39d5dde8aee4fa8845ec8f29abb..c400833a8c168158064b7e2ab3f0a1eb9ea063de 100644 (file)
@@ -109,11 +109,6 @@ struct smb_direct_transport {
        wait_queue_head_t       wait_send_credits;
        wait_queue_head_t       wait_rw_credits;
 
-       mempool_t               *sendmsg_mempool;
-       struct kmem_cache       *sendmsg_cache;
-       mempool_t               *recvmsg_mempool;
-       struct kmem_cache       *recvmsg_cache;
-
        wait_queue_head_t       wait_send_pending;
        atomic_t                send_pending;
 
@@ -412,7 +407,7 @@ static struct smbdirect_send_io
        struct smbdirect_socket *sc = &t->socket;
        struct smbdirect_send_io *msg;
 
-       msg = mempool_alloc(t->sendmsg_mempool, KSMBD_DEFAULT_GFP);
+       msg = mempool_alloc(sc->send_io.mem.pool, KSMBD_DEFAULT_GFP);
        if (!msg)
                return ERR_PTR(-ENOMEM);
        msg->socket = sc;
@@ -436,7 +431,7 @@ static void smb_direct_free_sendmsg(struct smb_direct_transport *t,
                                          msg->sge[i].addr, msg->sge[i].length,
                                          DMA_TO_DEVICE);
        }
-       mempool_free(msg, t->sendmsg_mempool);
+       mempool_free(msg, sc->send_io.mem.pool);
 }
 
 static int smb_direct_check_recvmsg(struct smbdirect_recv_io *recvmsg)
@@ -1856,22 +1851,23 @@ static int smb_direct_init_params(struct smb_direct_transport *t,
 
 static void smb_direct_destroy_pools(struct smb_direct_transport *t)
 {
+       struct smbdirect_socket *sc = &t->socket;
        struct smbdirect_recv_io *recvmsg;
 
        while ((recvmsg = get_free_recvmsg(t)))
-               mempool_free(recvmsg, t->recvmsg_mempool);
+               mempool_free(recvmsg, sc->recv_io.mem.pool);
 
-       mempool_destroy(t->recvmsg_mempool);
-       t->recvmsg_mempool = NULL;
+       mempool_destroy(sc->recv_io.mem.pool);
+       sc->recv_io.mem.pool = NULL;
 
-       kmem_cache_destroy(t->recvmsg_cache);
-       t->recvmsg_cache = NULL;
+       kmem_cache_destroy(sc->recv_io.mem.cache);
+       sc->recv_io.mem.cache = NULL;
 
-       mempool_destroy(t->sendmsg_mempool);
-       t->sendmsg_mempool = NULL;
+       mempool_destroy(sc->send_io.mem.pool);
+       sc->send_io.mem.pool = NULL;
 
-       kmem_cache_destroy(t->sendmsg_cache);
-       t->sendmsg_cache = NULL;
+       kmem_cache_destroy(sc->send_io.mem.cache);
+       sc->send_io.mem.cache = NULL;
 }
 
 static int smb_direct_create_pools(struct smb_direct_transport *t)
@@ -1883,35 +1879,35 @@ static int smb_direct_create_pools(struct smb_direct_transport *t)
        struct smbdirect_recv_io *recvmsg;
 
        snprintf(name, sizeof(name), "smbdirect_send_io_pool_%p", t);
-       t->sendmsg_cache = kmem_cache_create(name,
+       sc->send_io.mem.cache = kmem_cache_create(name,
                                             sizeof(struct smbdirect_send_io) +
                                              sizeof(struct smbdirect_negotiate_resp),
                                             0, SLAB_HWCACHE_ALIGN, NULL);
-       if (!t->sendmsg_cache)
+       if (!sc->send_io.mem.cache)
                return -ENOMEM;
 
-       t->sendmsg_mempool = mempool_create(sp->send_credit_target,
+       sc->send_io.mem.pool = mempool_create(sp->send_credit_target,
                                            mempool_alloc_slab, mempool_free_slab,
-                                           t->sendmsg_cache);
-       if (!t->sendmsg_mempool)
+                                           sc->send_io.mem.cache);
+       if (!sc->send_io.mem.pool)
                goto err;
 
        snprintf(name, sizeof(name), "smbdirect_recv_io_pool_%p", t);
-       t->recvmsg_cache = kmem_cache_create(name,
+       sc->recv_io.mem.cache = kmem_cache_create(name,
                                             sizeof(struct smbdirect_recv_io) +
                                             sp->max_recv_size,
                                             0, SLAB_HWCACHE_ALIGN, NULL);
-       if (!t->recvmsg_cache)
+       if (!sc->recv_io.mem.cache)
                goto err;
 
-       t->recvmsg_mempool =
+       sc->recv_io.mem.pool =
                mempool_create(sp->recv_credit_max, mempool_alloc_slab,
-                              mempool_free_slab, t->recvmsg_cache);
-       if (!t->recvmsg_mempool)
+                              mempool_free_slab, sc->recv_io.mem.cache);
+       if (!sc->recv_io.mem.pool)
                goto err;
 
        for (i = 0; i < sp->recv_credit_max; i++) {
-               recvmsg = mempool_alloc(t->recvmsg_mempool, KSMBD_DEFAULT_GFP);
+               recvmsg = mempool_alloc(sc->recv_io.mem.pool, KSMBD_DEFAULT_GFP);
                if (!recvmsg)
                        goto err;
                recvmsg->socket = sc;