smb: server: make use of smbdirect_socket.{send,recv}_io.mem.{cache,pool}

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>
This commit is contained in:
Stefan Metzmacher
2025-08-06 19:36:04 +02:00
committed by Steve French
parent 442959002f
commit 98dc77b310

View 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;