sock: Add extra checks around lists when in debug mode

Signed-off-by: Ben 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: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Ben Walker 2022-03-01 12:16:12 -07:00 committed by Tomasz Zawadzki
parent 5b750ea52b
commit fe85d7f1d1
2 changed files with 23 additions and 0 deletions

View File

@ -71,6 +71,9 @@ struct spdk_sock_request {
*/ */
struct __sock_request_internal { struct __sock_request_internal {
TAILQ_ENTRY(spdk_sock_request) link; TAILQ_ENTRY(spdk_sock_request) link;
#ifdef DEBUG
void *curr_list;
#endif
uint32_t offset; uint32_t offset;
} internal; } internal;

View File

@ -140,17 +140,25 @@ static void __attribute__((constructor)) net_impl_register_##name(void) \
static inline void static inline void
spdk_sock_request_queue(struct spdk_sock *sock, struct spdk_sock_request *req) 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); TAILQ_INSERT_TAIL(&sock->queued_reqs, req, internal.link);
#ifdef DEBUG
req->internal.curr_list = &sock->queued_reqs;
#endif
sock->queued_iovcnt += req->iovcnt; sock->queued_iovcnt += req->iovcnt;
} }
static inline void static inline void
spdk_sock_request_pend(struct spdk_sock *sock, struct spdk_sock_request *req) 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); TAILQ_REMOVE(&sock->queued_reqs, req, internal.link);
assert(sock->queued_iovcnt >= req->iovcnt); assert(sock->queued_iovcnt >= req->iovcnt);
sock->queued_iovcnt -= req->iovcnt; sock->queued_iovcnt -= req->iovcnt;
TAILQ_INSERT_TAIL(&sock->pending_reqs, req, internal.link); TAILQ_INSERT_TAIL(&sock->pending_reqs, req, internal.link);
#ifdef DEBUG
req->internal.curr_list = &sock->pending_reqs;
#endif
} }
static inline int static inline int
@ -159,7 +167,11 @@ spdk_sock_request_put(struct spdk_sock *sock, struct spdk_sock_request *req, int
bool closed; bool closed;
int rc = 0; int rc = 0;
assert(req->internal.curr_list == &sock->pending_reqs);
TAILQ_REMOVE(&sock->pending_reqs, req, internal.link); TAILQ_REMOVE(&sock->pending_reqs, req, internal.link);
#ifdef DEBUG
req->internal.curr_list = NULL;
#endif
req->internal.offset = 0; req->internal.offset = 0;
@ -190,7 +202,11 @@ spdk_sock_abort_requests(struct spdk_sock *sock)
req = TAILQ_FIRST(&sock->pending_reqs); req = TAILQ_FIRST(&sock->pending_reqs);
while (req) { while (req) {
assert(req->internal.curr_list == &sock->pending_reqs);
TAILQ_REMOVE(&sock->pending_reqs, req, internal.link); TAILQ_REMOVE(&sock->pending_reqs, req, internal.link);
#ifdef DEBUG
req->internal.curr_list = NULL;
#endif
req->cb_fn(req->cb_arg, -ECANCELED); 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); req = TAILQ_FIRST(&sock->queued_reqs);
while (req) { while (req) {
assert(req->internal.curr_list == &sock->queued_reqs);
TAILQ_REMOVE(&sock->queued_reqs, req, internal.link); TAILQ_REMOVE(&sock->queued_reqs, req, internal.link);
#ifdef DEBUG
req->internal.curr_list = NULL;
#endif
assert(sock->queued_iovcnt >= req->iovcnt); assert(sock->queued_iovcnt >= req->iovcnt);
sock->queued_iovcnt -= req->iovcnt; sock->queued_iovcnt -= req->iovcnt;