diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 934bf59f6..8ca52c34c 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -2144,11 +2144,8 @@ spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status sta } else { assert(shared_ch->io_outstanding > 0); shared_ch->io_outstanding--; - if (spdk_likely(status != SPDK_BDEV_IO_STATUS_NOMEM)) { - if (spdk_unlikely(!TAILQ_EMPTY(&shared_ch->nomem_io))) { - _spdk_bdev_ch_retry_io(bdev_ch); - } - } else { + + if (spdk_unlikely(status == SPDK_BDEV_IO_STATUS_NOMEM)) { TAILQ_INSERT_HEAD(&shared_ch->nomem_io, bdev_io, link); /* * Wait for some of the outstanding I/O to complete before we @@ -2160,6 +2157,10 @@ spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status sta (int64_t)shared_ch->io_outstanding - NOMEM_THRESHOLD_COUNT); return; } + + if (spdk_unlikely(!TAILQ_EMPTY(&shared_ch->nomem_io))) { + _spdk_bdev_ch_retry_io(bdev_ch); + } } if (status == SPDK_BDEV_IO_STATUS_SUCCESS) {