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:
parent
5b750ea52b
commit
fe85d7f1d1
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user