ublk: add ublk->next_state_fn
Instead of having the poller check the last ctrl_cmd_op to determine which function to call, just have ublk_ctrl_cmd store that function pointer in the ublk itself. This keeps all of the cmd_op-specific logic in one place rather than splitting it between the submit and poller functions. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I59f333d38a0d89cc4c50082177ff818135bcad37 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16454 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Xiaodong Liu <xiaodong.liu@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
parent
5b81c4bb9f
commit
525dcf4935
@ -43,6 +43,8 @@ struct ublk_thread_ctx;
|
|||||||
static void ublk_submit_bdev_io(struct ublk_queue *q, uint16_t tag);
|
static void ublk_submit_bdev_io(struct ublk_queue *q, uint16_t tag);
|
||||||
static void ublk_dev_queue_fini(struct ublk_queue *q);
|
static void ublk_dev_queue_fini(struct ublk_queue *q);
|
||||||
static int ublk_poll(void *arg);
|
static int ublk_poll(void *arg);
|
||||||
|
|
||||||
|
typedef void (*ublk_next_state_fn)(struct spdk_ublk_dev *ublk);
|
||||||
static void ublk_set_params(struct spdk_ublk_dev *ublk);
|
static void ublk_set_params(struct spdk_ublk_dev *ublk);
|
||||||
static void ublk_finish_start(struct spdk_ublk_dev *ublk);
|
static void ublk_finish_start(struct spdk_ublk_dev *ublk);
|
||||||
static void ublk_delete_dev(struct spdk_ublk_dev *ublk);
|
static void ublk_delete_dev(struct spdk_ublk_dev *ublk);
|
||||||
@ -99,7 +101,8 @@ struct spdk_ublk_dev {
|
|||||||
volatile bool is_closing;
|
volatile bool is_closing;
|
||||||
ublk_del_cb del_cb;
|
ublk_del_cb del_cb;
|
||||||
void *cb_arg;
|
void *cb_arg;
|
||||||
uint32_t last_cmd_op;
|
uint32_t ctrl_cmd_op;
|
||||||
|
ublk_next_state_fn next_state_fn;
|
||||||
uint32_t ctrl_ops_in_progress;
|
uint32_t ctrl_ops_in_progress;
|
||||||
|
|
||||||
TAILQ_ENTRY(spdk_ublk_dev) tailq;
|
TAILQ_ENTRY(spdk_ublk_dev) tailq;
|
||||||
@ -212,18 +215,8 @@ ublk_ctrl_poller(void *arg)
|
|||||||
}
|
}
|
||||||
ublk = (struct spdk_ublk_dev *)cqe->user_data;
|
ublk = (struct spdk_ublk_dev *)cqe->user_data;
|
||||||
ublk->ctrl_ops_in_progress--;
|
ublk->ctrl_ops_in_progress--;
|
||||||
switch (ublk->last_cmd_op) {
|
if (ublk->next_state_fn) {
|
||||||
case UBLK_CMD_ADD_DEV:
|
ublk->next_state_fn(ublk);
|
||||||
ublk_set_params(ublk);
|
|
||||||
break;
|
|
||||||
case UBLK_CMD_SET_PARAMS:
|
|
||||||
ublk_finish_start(ublk);
|
|
||||||
break;
|
|
||||||
case UBLK_CMD_DEL_DEV:
|
|
||||||
ublk_delete_dev(ublk);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
io_uring_cqe_seen(ring, cqe);
|
io_uring_cqe_seen(ring, cqe);
|
||||||
count++;
|
count++;
|
||||||
@ -251,7 +244,8 @@ ublk_ctrl_cmd(struct spdk_ublk_dev *ublk, uint32_t cmd_op)
|
|||||||
sqe->ioprio = 0;
|
sqe->ioprio = 0;
|
||||||
cmd->dev_id = dev_id;
|
cmd->dev_id = dev_id;
|
||||||
cmd->queue_id = -1;
|
cmd->queue_id = -1;
|
||||||
ublk->last_cmd_op = cmd_op;
|
ublk->ctrl_cmd_op = cmd_op;
|
||||||
|
ublk->next_state_fn = NULL;
|
||||||
|
|
||||||
switch (cmd_op) {
|
switch (cmd_op) {
|
||||||
case UBLK_CMD_START_DEV:
|
case UBLK_CMD_START_DEV:
|
||||||
@ -259,13 +253,17 @@ ublk_ctrl_cmd(struct spdk_ublk_dev *ublk, uint32_t cmd_op)
|
|||||||
cmd->data[1] = 0;
|
cmd->data[1] = 0;
|
||||||
break;
|
break;
|
||||||
case UBLK_CMD_ADD_DEV:
|
case UBLK_CMD_ADD_DEV:
|
||||||
|
ublk->next_state_fn = ublk_set_params;
|
||||||
cmd->addr = (__u64)(uintptr_t)&ublk->dev_info;
|
cmd->addr = (__u64)(uintptr_t)&ublk->dev_info;
|
||||||
cmd->len = sizeof(ublk->dev_info);
|
cmd->len = sizeof(ublk->dev_info);
|
||||||
break;
|
break;
|
||||||
case UBLK_CMD_STOP_DEV:
|
case UBLK_CMD_STOP_DEV:
|
||||||
|
break;
|
||||||
case UBLK_CMD_DEL_DEV:
|
case UBLK_CMD_DEL_DEV:
|
||||||
|
ublk->next_state_fn = ublk_delete_dev;
|
||||||
break;
|
break;
|
||||||
case UBLK_CMD_SET_PARAMS:
|
case UBLK_CMD_SET_PARAMS:
|
||||||
|
ublk->next_state_fn = ublk_finish_start;
|
||||||
cmd->addr = (__u64)(uintptr_t)&ublk->dev_params;
|
cmd->addr = (__u64)(uintptr_t)&ublk->dev_params;
|
||||||
cmd->len = sizeof(ublk->dev_params);
|
cmd->len = sizeof(ublk->dev_params);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user