Commit 339e42ff authored by Ziye Yang's avatar Ziye Yang Committed by Tomasz Zawadzki
Browse files

uring: Add the sock into pending_recv list if there is data in pipe



Port the similiar code from posix sock module if a sock
is removed and added to a new group.

Change-Id: I306bed3c90f79ee06a363fbab02c776e756cda2f
Signed-off-by: default avatarZiye Yang <ziye.yang@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2047


Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent 3bd113ea
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -1151,6 +1151,14 @@ spdk_uring_sock_group_impl_add_sock(struct spdk_sock_group_impl *_group,
	sock->pollin_task.sock = sock;
	sock->pollin_task.type = SPDK_SOCK_TASK_POLLIN;

	/* switched from another polling group due to scheduling */
	if (spdk_unlikely(sock->recv_pipe != NULL &&
			  (spdk_pipe_reader_bytes_available(sock->recv_pipe) > 0))) {
		assert(sock->pending_recv == false);
		sock->pending_recv = true;
		TAILQ_INSERT_TAIL(&group->pending_recv, sock, link);
	}

	return 0;
}

@@ -1161,6 +1169,7 @@ spdk_uring_sock_group_impl_remove_sock(struct spdk_sock_group_impl *_group,
	struct spdk_uring_sock *sock = __uring_sock(_sock);
	struct spdk_uring_sock_group_impl *group = __uring_group_impl(_group);


	if (sock->write_task.status != SPDK_URING_SOCK_TASK_NOT_IN_USE) {
		sock->outstanding_io++;
	}
@@ -1169,11 +1178,13 @@ spdk_uring_sock_group_impl_remove_sock(struct spdk_sock_group_impl *_group,
		sock->outstanding_io++;
	}

	if ((sock->recv_pipe != NULL) &&
	    spdk_pipe_reader_bytes_available(sock->recv_pipe) > 0) {
	if (sock->recv_pipe != NULL) {
		if (spdk_pipe_reader_bytes_available(sock->recv_pipe) > 0) {
			TAILQ_REMOVE(&group->pending_recv, sock, link);
			sock->pending_recv = false;
		}
		assert(sock->pending_recv == false);
	}

	if (!sock->outstanding_io) {
		sock->group = NULL;