mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-14 12:21:15 -04:00
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:
committed by
Steve French
parent
442959002f
commit
98dc77b310
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user