Commit 41946ae1 authored by Jacek Kalwas's avatar Jacek Kalwas Committed by Jim Harris
Browse files

bdev: prevent nomem poller reallocation



Logic is slightly simplified also poller is registered in one place
only now. There is no risk of double registration on retry cb as there
is a check within _bdev_io_handle_no_mem.

Change-Id: Idee2be4c5fe1b63794f445bc3573c4a6f801b458
Signed-off-by: default avatarJacek Kalwas <jacek.kalwas@nutanix.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/25756


Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarGangCao <gang.cao@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
parent 472d48da
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -1698,22 +1698,19 @@ bdev_no_mem_poller(void *ctx)
{
	struct spdk_bdev_shared_resource *shared_resource = ctx;

	spdk_poller_unregister(&shared_resource->nomem_poller);

	if (!TAILQ_EMPTY(&shared_resource->nomem_io)) {
		bdev_shared_ch_retry_io(shared_resource);
	}
	/* the retry cb may re-register the poller so double check */
	if (!TAILQ_EMPTY(&shared_resource->nomem_io) &&
	    shared_resource->io_outstanding == 0 && shared_resource->nomem_poller == NULL) {
		/* No IOs were submitted, try again */
		shared_resource->nomem_poller = SPDK_POLLER_REGISTER(bdev_no_mem_poller, shared_resource,
						SPDK_BDEV_IO_POLL_INTERVAL_IN_MSEC * 10);
	}

	/* Keep poller registered if list is not empty and there are no io outstanding. */
	if (!TAILQ_EMPTY(&shared_resource->nomem_io) && shared_resource->io_outstanding == 0) {
		return SPDK_POLLER_BUSY;
	}

	spdk_poller_unregister(&shared_resource->nomem_poller);
	return SPDK_POLLER_IDLE;
}

static inline bool
_bdev_io_handle_no_mem(struct spdk_bdev_io *bdev_io, enum bdev_io_retry_state state)
{