Commit d9989207 authored by Stefan Metzmacher's avatar Stefan Metzmacher Committed by Steve French
Browse files

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: default avatarStefan Metzmacher <metze@samba.org>
Acked-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 9883a142
Loading
Loading
Loading
Loading
+12 −15
Original line number Diff line number Diff line
@@ -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;