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 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);
}

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);
/**
* 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
*

View File

@ -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,