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:
parent
10abf16de2
commit
b71eebd85a
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
*
|
*
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user