Commit 1a91a68f authored by Wojciech Malikowski's avatar Wojciech Malikowski Committed by Tomasz Zawadzki
Browse files

lib/ftl: Return SPDK_POLLER_BUSY flag only when writes were submitted



FTL core poller should return SPDK_POLLER_BUSY flag only
when some writes operations were processed.

Signed-off-by: default avatarWojciech Malikowski <wojciech.malikowski@intel.com>
Change-Id: I50e2b536fbec819887148cc045d76c5c5d78beb2
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3619


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
parent d156d2f7
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -1942,15 +1942,15 @@ error:
	return 0;
}

static int
static bool
ftl_process_writes(struct spdk_ftl_dev *dev)
{
	struct ftl_wptr *wptr, *twptr;
	size_t num_active = 0;
	size_t num_active = 0, num_writes = 0;
	enum ftl_band_state state;

	LIST_FOREACH_SAFE(wptr, &dev->wptr_list, list_entry, twptr) {
		ftl_wptr_process_writes(wptr);
		num_writes += ftl_wptr_process_writes(wptr);
		state = wptr->band->state;

		if (state != FTL_BAND_STATE_FULL &&
@@ -1964,7 +1964,7 @@ ftl_process_writes(struct spdk_ftl_dev *dev)
		ftl_add_wptr(dev);
	}

	return 0;
	return num_writes != 0;
}

static void
@@ -2104,7 +2104,7 @@ ftl_select_defrag_band(struct spdk_ftl_dev *dev)
	return mband;
}

static void
static bool
ftl_process_relocs(struct spdk_ftl_dev *dev)
{
	struct ftl_band *band;
@@ -2117,7 +2117,7 @@ ftl_process_relocs(struct spdk_ftl_dev *dev)
		}
	}

	ftl_reloc(dev->reloc);
	return ftl_reloc(dev->reloc);
}

int
@@ -2443,6 +2443,7 @@ int
ftl_task_core(void *ctx)
{
	struct spdk_ftl_dev *dev = ctx;
	bool busy;

	if (dev->halt) {
		if (ftl_shutdown_complete(dev)) {
@@ -2451,10 +2452,9 @@ ftl_task_core(void *ctx)
		}
	}

	ftl_process_writes(dev);
	ftl_process_relocs(dev);
	busy = ftl_process_writes(dev) || ftl_process_relocs(dev);

	return SPDK_POLLER_BUSY;
	return busy ? SPDK_POLLER_BUSY : SPDK_POLLER_IDLE;
}

SPDK_LOG_REGISTER_COMPONENT("ftl_core", SPDK_LOG_FTL_CORE)
+5 −3
Original line number Diff line number Diff line
@@ -747,20 +747,20 @@ ftl_reloc_resume(struct ftl_reloc *reloc)
	reloc->halt = false;
}

void
bool
ftl_reloc(struct ftl_reloc *reloc)
{
	struct ftl_band_reloc *breloc, *tbreloc;

	if (ftl_reloc_is_halted(reloc)) {
		return;
		return false;
	}

	/* Process first band from priority queue and return */
	breloc = TAILQ_FIRST(&reloc->prio_queue);
	if (breloc) {
		ftl_process_reloc(breloc);
		return;
		return true;
	}

	TAILQ_FOREACH_SAFE(breloc, &reloc->pending_queue, entry, tbreloc) {
@@ -784,6 +784,8 @@ ftl_reloc(struct ftl_reloc *reloc)
		assert(breloc->state == FTL_BAND_RELOC_STATE_ACTIVE);
		ftl_process_reloc(breloc);
	}

	return reloc->num_active != 0;
}

void
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ struct ftl_reloc *ftl_reloc_init(struct spdk_ftl_dev *dev);
void			ftl_reloc_free(struct ftl_reloc *reloc);
void			ftl_reloc_add(struct ftl_reloc *reloc, struct ftl_band *band,
				      size_t offset, size_t num_blocks, int prio, bool is_defrag);
void			ftl_reloc(struct ftl_reloc *reloc);
bool			ftl_reloc(struct ftl_reloc *reloc);
void			ftl_reloc_halt(struct ftl_reloc *reloc);
void			ftl_reloc_resume(struct ftl_reloc *reloc);
bool			ftl_reloc_is_halted(const struct ftl_reloc *reloc);