Commit b71eebd8 authored by Artur Paszkiewicz's avatar Artur Paszkiewicz Committed by Konrad Sztyber
Browse files

ftl: mngt: pass status and ctx directly to completion cb



Also remove ftl_mngt_get_status() because it won't be necessary now.

Signed-off-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Change-Id: I335831cb1c506379e9afeb0bf87f1f873033073d
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13668


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent 10abf16d
Loading
Loading
Loading
Loading
+23 −27
Original line number Diff line number Diff line
@@ -28,11 +28,11 @@ struct ftl_mngt_step {
struct ftl_mngt_process {
	struct spdk_ftl_dev *dev;
	int status;
	int silent;
	bool silent;
	bool rollback;
	bool continuing;
	struct  {
		ftl_mngt_fn cb;
		ftl_mngt_completion cb;
		void *cb_ctx;
		struct spdk_thread *thread;
	} caller;
@@ -121,9 +121,8 @@ free_mngt(struct ftl_mngt_process *mngt)
}

static struct ftl_mngt_process *
allocate_mngt(struct spdk_ftl_dev *dev,
	      const struct ftl_mngt_process_desc *pdesc,
	      ftl_mngt_fn cb, void *cb_ctx)
allocate_mngt(struct spdk_ftl_dev *dev, const struct ftl_mngt_process_desc *pdesc,
	      ftl_mngt_completion cb, void *cb_ctx, bool silent)
{
	struct ftl_mngt_process *mngt;

@@ -133,6 +132,7 @@ allocate_mngt(struct spdk_ftl_dev *dev,
		goto error;
	}
	mngt->dev = dev;
	mngt->silent = silent;
	mngt->caller.cb = cb;
	mngt->caller.cb_ctx = cb_ctx;
	mngt->caller.thread = spdk_get_thread();
@@ -157,16 +157,15 @@ error:
	return NULL;
}

int
ftl_mngt_process_execute(struct spdk_ftl_dev *dev,
			 const struct ftl_mngt_process_desc *pdesc,
			 ftl_mngt_fn cb, void *cb_ctx)
static int
_ftl_mngt_process_execute(struct spdk_ftl_dev *dev, const struct ftl_mngt_process_desc *pdesc,
			  ftl_mngt_completion cb, void *cb_ctx, bool silent)
{
	const struct ftl_mngt_step_desc *sdesc;
	struct ftl_mngt_process *mngt;
	int rc = 0;

	mngt = allocate_mngt(dev, pdesc, cb, cb_ctx);
	mngt = allocate_mngt(dev, pdesc, cb, cb_ctx, silent);
	if (!mngt) {
		rc = -ENOMEM;
		goto error;
@@ -201,15 +200,21 @@ error:
}

int
ftl_mngt_process_rollback(struct spdk_ftl_dev *dev,
			  const struct ftl_mngt_process_desc *pdesc,
			  ftl_mngt_fn cb, void *cb_ctx)
ftl_mngt_process_execute(struct spdk_ftl_dev *dev, const struct ftl_mngt_process_desc *pdesc,
			 ftl_mngt_completion cb, void *cb_ctx)
{
	return _ftl_mngt_process_execute(dev, pdesc, cb, cb_ctx, false);
}

int
ftl_mngt_process_rollback(struct spdk_ftl_dev *dev, const struct ftl_mngt_process_desc *pdesc,
			  ftl_mngt_completion cb, void *cb_ctx)
{
	const struct ftl_mngt_step_desc *sdesc;
	struct ftl_mngt_process *mngt;
	int rc = 0;

	mngt = allocate_mngt(dev, pdesc, cb, cb_ctx);
	mngt = allocate_mngt(dev, pdesc, cb, cb_ctx, true);
	if (!mngt) {
		rc = -ENOMEM;
		goto error;
@@ -285,12 +290,6 @@ ftl_mngt_get_caller_ctx(struct ftl_mngt_process *mngt)
	return mngt->caller.cb_ctx;
}

int
ftl_mngt_get_status(struct ftl_mngt_process *mngt)
{
	return mngt->status;
}

void
ftl_mngt_next_step(struct ftl_mngt_process *mngt)
{
@@ -328,12 +327,9 @@ ftl_mngt_continue_step(struct ftl_mngt_process *mngt)
}

static void
child_cb(struct spdk_ftl_dev *dev, struct ftl_mngt_process *child)
child_cb(struct spdk_ftl_dev *dev, void *ctx, int status)
{
	int status = ftl_mngt_get_status(child);
	struct ftl_mngt_process *parent = ftl_mngt_get_caller_ctx(child);

	child->silent = true;
	struct ftl_mngt_process *parent = ctx;

	if (status) {
		ftl_mngt_fail_step(parent);
@@ -346,7 +342,7 @@ void
ftl_mngt_call_process(struct ftl_mngt_process *mngt,
		      const struct ftl_mngt_process_desc *pdesc)
{
	if (ftl_mngt_process_execute(mngt->dev, pdesc, child_cb, mngt)) {
	if (_ftl_mngt_process_execute(mngt->dev, pdesc, child_cb, mngt, true)) {
		ftl_mngt_fail_step(mngt);
	} else {
		if (mngt->rollback) {
@@ -436,7 +432,7 @@ finish_msg(void *ctx)
{
	struct ftl_mngt_process *mngt = ctx;

	mngt->caller.cb(mngt->dev, mngt);
	mngt->caller.cb(mngt->dev, mngt->caller.cb_ctx, mngt->status);
	process_summary(mngt);
	free_mngt(mngt);
}
+11 −15
Original line number Diff line number Diff line
@@ -20,6 +20,15 @@ struct ftl_mngt_process;
 */
typedef void (*ftl_mngt_fn)(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt);

/**
 * The FTL management process completion callback function
 *
 * @param dev FTL device
 * @param ctx Caller context
 * @param status The operation result of the management process
 */
typedef void (*ftl_mngt_completion)(struct spdk_ftl_dev *dev, void *ctx, int status);

/**
 * The FTL management step descriptior
 */
@@ -116,7 +125,7 @@ struct ftl_mngt_process_desc {
 */
int ftl_mngt_process_execute(struct spdk_ftl_dev *dev,
			     const struct ftl_mngt_process_desc *process,
			     ftl_mngt_fn cb, void *cb_ctx);
			     ftl_mngt_completion cb, void *cb_ctx);

/**
 * @brief Executes rollback on the FTL management process defined by the process
@@ -135,7 +144,7 @@ int ftl_mngt_process_execute(struct spdk_ftl_dev *dev,
 */
int ftl_mngt_process_rollback(struct spdk_ftl_dev *dev,
			      const struct ftl_mngt_process_desc *process,
			      ftl_mngt_fn cb, void *cb_ctx);
			      ftl_mngt_completion cb, void *cb_ctx);

/*
 * FTL management API for steps
@@ -199,19 +208,6 @@ void *ftl_mngt_get_process_ctx(struct ftl_mngt_process *mngt);
 */
void *ftl_mngt_get_caller_ctx(struct ftl_mngt_process *mngt);

/**
 * @brief Gets the status of executed management process
 *
 * @param mngt FTL management handle
 *
 * @note This function can be invoked within ftl_mngt_fn callback only
 *
 * @return The operation result of the management process
 * @retval 0 Operation successful
 * @retval Non-zero Operation failure
 */
int ftl_mngt_get_status(struct ftl_mngt_process *mngt);

/**
 * @brief Finishes the management process immediately
 *
+2 −2
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ check_elem_on_list_and_remove(int compared_elem)
}

static void
fn_finish(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
fn_finish(struct spdk_ftl_dev *dev, void *ctx, int status)
{
	add_elem_to_test_list(CALLER_CB_RET_VALUE);
	g_thread_send_msg_container.fn = NULL;
@@ -89,7 +89,7 @@ fn_finish(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)

typedef int (*ftl_execute_fn)(struct spdk_ftl_dev *dev,
			      const struct ftl_mngt_process_desc *process,
			      ftl_mngt_fn cb, void *cb_cntx);
			      ftl_mngt_completion cb, void *cb_cntx);

static void
run_ftl_mngt_with_cb_cntx(ftl_execute_fn exec_fn,