From f1da65ef283b9016e3a6362ac15044659f30a381 Mon Sep 17 00:00:00 2001 From: Wojciech Malikowski Date: Thu, 28 Feb 2019 11:40:14 -0500 Subject: [PATCH] lib/bdev: Assert if there is no outstanding IO after completion with ENOMEM Retry mechanism will stuck if there is no outstanding IO after completion with ENOMEM. This should never happen. Change-Id: I58ebf8cc8a498231beef43ac20f58eeaad89afda Signed-off-by: Wojciech Malikowski Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/446610 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto Reviewed-by: Darek Stojaczyk --- lib/bdev/bdev.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 19f0d7209..04ff826c2 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -3380,6 +3380,7 @@ spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status sta shared_resource->io_outstanding--; if (spdk_unlikely(status == SPDK_BDEV_IO_STATUS_NOMEM)) { + assert(shared_resource->io_outstanding > 0); TAILQ_INSERT_HEAD(&shared_resource->nomem_io, bdev_io, internal.link); /* * Wait for some of the outstanding I/O to complete before we