Commit 2bc33857 authored by Yoav Cohen's avatar Yoav Cohen Committed by Tomasz Zawadzki
Browse files

lib/bdev: Fix enomem poller leak



bdev_no_mem_poller may retry an IO which will fail with -ENOMEM.
_bdev_io_handle_no_mem will register a new poller, and later bdev_no_mem_poller will register another poller and cause the old one to leak.

Just recheck shared_resource->nomem_poller before register the poller

Change-Id: I07c4f4b5249f1678570ae45c32332a71d5e0654e
Signed-off-by: default avatarYoav Cohen <yoav@nvidia.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/21214


Reviewed-by: default avatarMateusz Kozlowski <mateusz.kozlowski@solidigm.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 613669b2
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1512,7 +1512,9 @@ bdev_no_mem_poller(void *ctx)
	if (!TAILQ_EMPTY(&shared_resource->nomem_io)) {
		bdev_shared_ch_retry_io(shared_resource);
	}
	if (!TAILQ_EMPTY(&shared_resource->nomem_io) && shared_resource->io_outstanding == 0) {
	/* 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);