Commit fe85d7f1 authored by Ben Walker's avatar Ben Walker Committed by Tomasz Zawadzki
Browse files

sock: Add extra checks around lists when in debug mode



Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
Change-Id: Iae99fec37437521ef5b528a4bb315a3866a423ed
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11782


Community-CI: Mellanox Build Bot
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 5b750ea5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -71,6 +71,9 @@ struct spdk_sock_request {
	 */
	struct __sock_request_internal {
		TAILQ_ENTRY(spdk_sock_request)	link;
#ifdef DEBUG
		void				*curr_list;
#endif
		uint32_t			offset;
	} internal;

+20 −0
Original line number Diff line number Diff line
@@ -140,17 +140,25 @@ static void __attribute__((constructor)) net_impl_register_##name(void) \
static inline void
spdk_sock_request_queue(struct spdk_sock *sock, struct spdk_sock_request *req)
{
	assert(req->internal.curr_list == NULL);
	TAILQ_INSERT_TAIL(&sock->queued_reqs, req, internal.link);
#ifdef DEBUG
	req->internal.curr_list = &sock->queued_reqs;
#endif
	sock->queued_iovcnt += req->iovcnt;
}

static inline void
spdk_sock_request_pend(struct spdk_sock *sock, struct spdk_sock_request *req)
{
	assert(req->internal.curr_list == &sock->queued_reqs);
	TAILQ_REMOVE(&sock->queued_reqs, req, internal.link);
	assert(sock->queued_iovcnt >= req->iovcnt);
	sock->queued_iovcnt -= req->iovcnt;
	TAILQ_INSERT_TAIL(&sock->pending_reqs, req, internal.link);
#ifdef DEBUG
	req->internal.curr_list = &sock->pending_reqs;
#endif
}

static inline int
@@ -159,7 +167,11 @@ spdk_sock_request_put(struct spdk_sock *sock, struct spdk_sock_request *req, int
	bool closed;
	int rc = 0;

	assert(req->internal.curr_list == &sock->pending_reqs);
	TAILQ_REMOVE(&sock->pending_reqs, req, internal.link);
#ifdef DEBUG
	req->internal.curr_list = NULL;
#endif

	req->internal.offset = 0;

@@ -190,7 +202,11 @@ spdk_sock_abort_requests(struct spdk_sock *sock)

	req = TAILQ_FIRST(&sock->pending_reqs);
	while (req) {
		assert(req->internal.curr_list == &sock->pending_reqs);
		TAILQ_REMOVE(&sock->pending_reqs, req, internal.link);
#ifdef DEBUG
		req->internal.curr_list = NULL;
#endif

		req->cb_fn(req->cb_arg, -ECANCELED);

@@ -199,7 +215,11 @@ spdk_sock_abort_requests(struct spdk_sock *sock)

	req = TAILQ_FIRST(&sock->queued_reqs);
	while (req) {
		assert(req->internal.curr_list == &sock->queued_reqs);
		TAILQ_REMOVE(&sock->queued_reqs, req, internal.link);
#ifdef DEBUG
		req->internal.curr_list = NULL;
#endif

		assert(sock->queued_iovcnt >= req->iovcnt);
		sock->queued_iovcnt -= req->iovcnt;