diff options
| author | Stefan Metzmacher <metze@samba.org> | 2025-08-06 19:36:00 +0200 |
|---|---|---|
| committer | Steve French <stfrench@microsoft.com> | 2025-09-28 18:29:51 -0500 |
| commit | d9989207b78c2fa3008285c8b1e53e8618544de7 (patch) | |
| tree | d380d710223cb2c6aa9265798c021dc859df19a0 | |
| parent | 9883a142f1bba5bdc3a3091608aef8b1600cdd11 (diff) | |
| download | linux-d9989207b78c2fa3008285c8b1e53e8618544de7.tar.gz linux-d9989207b78c2fa3008285c8b1e53e8618544de7.zip | |
smb: server: make use of smbdirect_socket.recv_io.free.{list,lock}
This is already used by the client and will allow us to
add common helper functions soon.
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>
| -rw-r--r-- | fs/smb/server/transport_rdma.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c index c4e786f2e7e7..8eec651e2f9e 100644 --- a/fs/smb/server/transport_rdma.c +++ b/fs/smb/server/transport_rdma.c @@ -110,9 +110,6 @@ struct smb_direct_transport { int count_avail_recvmsg; int recv_credit_target; - spinlock_t recvmsg_queue_lock; - struct list_head recvmsg_queue; - atomic_t send_credits; spinlock_t lock_new_recv_credits; int new_recv_credits; @@ -222,16 +219,17 @@ static inline bool is_receive_credit_post_required(int receive_credits, static struct smbdirect_recv_io *get_free_recvmsg(struct smb_direct_transport *t) { + struct smbdirect_socket *sc = &t->socket; 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, + spin_lock(&sc->recv_io.free.lock); + if (!list_empty(&sc->recv_io.free.list)) { + recvmsg = list_first_entry(&sc->recv_io.free.list, struct smbdirect_recv_io, list); list_del(&recvmsg->list); } - spin_unlock(&t->recvmsg_queue_lock); + spin_unlock(&sc->recv_io.free.lock); return recvmsg; } @@ -248,9 +246,9 @@ static void put_recvmsg(struct smb_direct_transport *t, recvmsg->sge.length = 0; } - spin_lock(&t->recvmsg_queue_lock); - list_add(&recvmsg->list, &t->recvmsg_queue); - spin_unlock(&t->recvmsg_queue_lock); + spin_lock(&sc->recv_io.free.lock); + list_add(&recvmsg->list, &sc->recv_io.free.list); + spin_unlock(&sc->recv_io.free.lock); } static void enqueue_reassembly(struct smb_direct_transport *t, @@ -333,6 +331,9 @@ static struct smb_direct_transport *alloc_transport(struct rdma_cm_id *cm_id) sc->ib.dev = sc->rdma.cm_id->device; + INIT_LIST_HEAD(&sc->recv_io.free.list); + spin_lock_init(&sc->recv_io.free.lock); + sc->status = SMBDIRECT_SOCKET_CREATED; init_waitqueue_head(&t->wait_status); @@ -345,8 +346,6 @@ static struct smb_direct_transport *alloc_transport(struct rdma_cm_id *cm_id) init_waitqueue_head(&t->wait_rw_credits); spin_lock_init(&t->receive_credit_lock); - spin_lock_init(&t->recvmsg_queue_lock); - INIT_LIST_HEAD(&t->recvmsg_queue); init_waitqueue_head(&t->wait_send_pending); atomic_set(&t->send_pending, 0); @@ -1925,15 +1924,13 @@ static int smb_direct_create_pools(struct smb_direct_transport *t) if (!t->recvmsg_mempool) goto err; - INIT_LIST_HEAD(&t->recvmsg_queue); - for (i = 0; i < sp->recv_credit_max; i++) { recvmsg = mempool_alloc(t->recvmsg_mempool, KSMBD_DEFAULT_GFP); if (!recvmsg) goto err; recvmsg->socket = sc; recvmsg->sge.length = 0; - list_add(&recvmsg->list, &t->recvmsg_queue); + list_add(&recvmsg->list, &sc->recv_io.free.list); } t->count_avail_recvmsg = sp->recv_credit_max; |
