mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 19:47:08 +02:00
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>
This commit is contained in:
parent
9883a142f1
commit
d9989207b7
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user