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: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
Change-Id: I335831cb1c506379e9afeb0bf87f1f873033073d
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13668
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
This commit is contained in:
Artur Paszkiewicz 2022-07-12 15:03:37 -07:00 committed by Konrad Sztyber
parent 10abf16de2
commit b71eebd85a
3 changed files with 36 additions and 44 deletions

View File

@ -28,11 +28,11 @@ struct ftl_mngt_step {
struct ftl_mngt_process { struct ftl_mngt_process {
struct spdk_ftl_dev *dev; struct spdk_ftl_dev *dev;
int status; int status;
int silent; bool silent;
bool rollback; bool rollback;
bool continuing; bool continuing;
struct { struct {
ftl_mngt_fn cb; ftl_mngt_completion cb;
void *cb_ctx; void *cb_ctx;
struct spdk_thread *thread; struct spdk_thread *thread;
} caller; } caller;
@ -121,9 +121,8 @@ free_mngt(struct ftl_mngt_process *mngt)
} }
static struct ftl_mngt_process * static struct ftl_mngt_process *
allocate_mngt(struct spdk_ftl_dev *dev, allocate_mngt(struct spdk_ftl_dev *dev, const struct ftl_mngt_process_desc *pdesc,
const struct ftl_mngt_process_desc *pdesc, ftl_mngt_completion cb, void *cb_ctx, bool silent)
ftl_mngt_fn cb, void *cb_ctx)
{ {
struct ftl_mngt_process *mngt; struct ftl_mngt_process *mngt;
@ -133,6 +132,7 @@ allocate_mngt(struct spdk_ftl_dev *dev,
goto error; goto error;
} }
mngt->dev = dev; mngt->dev = dev;
mngt->silent = silent;
mngt->caller.cb = cb; mngt->caller.cb = cb;
mngt->caller.cb_ctx = cb_ctx; mngt->caller.cb_ctx = cb_ctx;
mngt->caller.thread = spdk_get_thread(); mngt->caller.thread = spdk_get_thread();
@ -157,16 +157,15 @@ error:
return NULL; return NULL;
} }
int static int
ftl_mngt_process_execute(struct spdk_ftl_dev *dev, _ftl_mngt_process_execute(struct spdk_ftl_dev *dev, const struct ftl_mngt_process_desc *pdesc,
const struct ftl_mngt_process_desc *pdesc, ftl_mngt_completion cb, void *cb_ctx, bool silent)
ftl_mngt_fn cb, void *cb_ctx)
{ {
const struct ftl_mngt_step_desc *sdesc; const struct ftl_mngt_step_desc *sdesc;
struct ftl_mngt_process *mngt; struct ftl_mngt_process *mngt;
int rc = 0; int rc = 0;
mngt = allocate_mngt(dev, pdesc, cb, cb_ctx); mngt = allocate_mngt(dev, pdesc, cb, cb_ctx, silent);
if (!mngt) { if (!mngt) {
rc = -ENOMEM; rc = -ENOMEM;
goto error; goto error;
@ -201,15 +200,21 @@ error:
} }
int int
ftl_mngt_process_rollback(struct spdk_ftl_dev *dev, ftl_mngt_process_execute(struct spdk_ftl_dev *dev, const struct ftl_mngt_process_desc *pdesc,
const struct ftl_mngt_process_desc *pdesc, ftl_mngt_completion cb, void *cb_ctx)
ftl_mngt_fn 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; const struct ftl_mngt_step_desc *sdesc;
struct ftl_mngt_process *mngt; struct ftl_mngt_process *mngt;
int rc = 0; int rc = 0;
mngt = allocate_mngt(dev, pdesc, cb, cb_ctx); mngt = allocate_mngt(dev, pdesc, cb, cb_ctx, true);
if (!mngt) { if (!mngt) {
rc = -ENOMEM; rc = -ENOMEM;
goto error; goto error;
@ -285,12 +290,6 @@ ftl_mngt_get_caller_ctx(struct ftl_mngt_process *mngt)
return mngt->caller.cb_ctx; return mngt->caller.cb_ctx;
} }
int
ftl_mngt_get_status(struct ftl_mngt_process *mngt)
{
return mngt->status;
}
void void
ftl_mngt_next_step(struct ftl_mngt_process *mngt) ftl_mngt_next_step(struct ftl_mngt_process *mngt)
{ {
@ -328,12 +327,9 @@ ftl_mngt_continue_step(struct ftl_mngt_process *mngt)
} }
static void 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 = ctx;
struct ftl_mngt_process *parent = ftl_mngt_get_caller_ctx(child);
child->silent = true;
if (status) { if (status) {
ftl_mngt_fail_step(parent); ftl_mngt_fail_step(parent);
@ -346,7 +342,7 @@ void
ftl_mngt_call_process(struct ftl_mngt_process *mngt, ftl_mngt_call_process(struct ftl_mngt_process *mngt,
const struct ftl_mngt_process_desc *pdesc) 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); ftl_mngt_fail_step(mngt);
} else { } else {
if (mngt->rollback) { if (mngt->rollback) {
@ -436,7 +432,7 @@ finish_msg(void *ctx)
{ {
struct ftl_mngt_process *mngt = 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); process_summary(mngt);
free_mngt(mngt); free_mngt(mngt);
} }

View File

@ -20,6 +20,15 @@ struct ftl_mngt_process;
*/ */
typedef void (*ftl_mngt_fn)(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt); 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 * The FTL management step descriptior
*/ */
@ -116,7 +125,7 @@ struct ftl_mngt_process_desc {
*/ */
int ftl_mngt_process_execute(struct spdk_ftl_dev *dev, int ftl_mngt_process_execute(struct spdk_ftl_dev *dev,
const struct ftl_mngt_process_desc *process, 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 * @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, int ftl_mngt_process_rollback(struct spdk_ftl_dev *dev,
const struct ftl_mngt_process_desc *process, 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 * 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); 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 * @brief Finishes the management process immediately
* *

View File

@ -80,7 +80,7 @@ check_elem_on_list_and_remove(int compared_elem)
} }
static void 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); add_elem_to_test_list(CALLER_CB_RET_VALUE);
g_thread_send_msg_container.fn = NULL; 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, typedef int (*ftl_execute_fn)(struct spdk_ftl_dev *dev,
const struct ftl_mngt_process_desc *process, const struct ftl_mngt_process_desc *process,
ftl_mngt_fn cb, void *cb_cntx); ftl_mngt_completion cb, void *cb_cntx);
static void static void
run_ftl_mngt_with_cb_cntx(ftl_execute_fn exec_fn, run_ftl_mngt_with_cb_cntx(ftl_execute_fn exec_fn,