lvol: do not use task->status
There is no point in setting this value on submission and changing it on callback. Since it is based on blob bserrno. lvol_task is removed in next patch. This change was motivated by lvol_op_comp() accessing the task->status pointer on hot path for I/O. There is no need to do so, so just pass status. Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Change-Id: I17461fcf355f771f4de4e6d5ec1900d5042bd3d5 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1804 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
3a574c3c13
commit
4e4c293b9a
@ -749,18 +749,19 @@ lvol_op_comp(void *cb_arg, int bserrno)
|
||||
{
|
||||
struct lvol_task *task = cb_arg;
|
||||
struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(task);
|
||||
enum spdk_bdev_io_status status = SPDK_BDEV_IO_STATUS_SUCCESS;
|
||||
|
||||
if (bserrno != 0) {
|
||||
if (bserrno == -ENOMEM) {
|
||||
task->status = SPDK_BDEV_IO_STATUS_NOMEM;
|
||||
status = SPDK_BDEV_IO_STATUS_NOMEM;
|
||||
} else {
|
||||
task->status = SPDK_BDEV_IO_STATUS_FAILED;
|
||||
status = SPDK_BDEV_IO_STATUS_FAILED;
|
||||
}
|
||||
}
|
||||
|
||||
SPDK_INFOLOG(SPDK_LOG_VBDEV_LVOL, "Vbdev processing callback on device %s with type %d\n",
|
||||
bdev_io->bdev->name, bdev_io->type);
|
||||
spdk_bdev_io_complete(bdev_io, task->status);
|
||||
spdk_bdev_io_complete(bdev_io, status);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -773,8 +774,6 @@ lvol_unmap(struct spdk_lvol *lvol, struct spdk_io_channel *ch, struct spdk_bdev_
|
||||
start_page = bdev_io->u.bdev.offset_blocks;
|
||||
num_pages = bdev_io->u.bdev.num_blocks;
|
||||
|
||||
task->status = SPDK_BDEV_IO_STATUS_SUCCESS;
|
||||
|
||||
SPDK_INFOLOG(SPDK_LOG_VBDEV_LVOL,
|
||||
"Vbdev doing unmap at offset %" PRIu64 " using %" PRIu64 " pages on device %s\n", start_page,
|
||||
num_pages, bdev_io->bdev->name);
|
||||
@ -791,8 +790,6 @@ lvol_write_zeroes(struct spdk_lvol *lvol, struct spdk_io_channel *ch, struct spd
|
||||
start_page = bdev_io->u.bdev.offset_blocks;
|
||||
num_pages = bdev_io->u.bdev.num_blocks;
|
||||
|
||||
task->status = SPDK_BDEV_IO_STATUS_SUCCESS;
|
||||
|
||||
SPDK_INFOLOG(SPDK_LOG_VBDEV_LVOL,
|
||||
"Vbdev doing write zeros at offset %" PRIu64 " using %" PRIu64 " pages on device %s\n", start_page,
|
||||
num_pages, bdev_io->bdev->name);
|
||||
@ -810,8 +807,6 @@ lvol_read(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
|
||||
start_page = bdev_io->u.bdev.offset_blocks;
|
||||
num_pages = bdev_io->u.bdev.num_blocks;
|
||||
|
||||
task->status = SPDK_BDEV_IO_STATUS_SUCCESS;
|
||||
|
||||
SPDK_INFOLOG(SPDK_LOG_VBDEV_LVOL,
|
||||
"Vbdev doing read at offset %" PRIu64 " using %" PRIu64 " pages on device %s\n", start_page,
|
||||
num_pages, bdev_io->bdev->name);
|
||||
@ -829,8 +824,6 @@ lvol_write(struct spdk_lvol *lvol, struct spdk_io_channel *ch, struct spdk_bdev_
|
||||
start_page = bdev_io->u.bdev.offset_blocks;
|
||||
num_pages = bdev_io->u.bdev.num_blocks;
|
||||
|
||||
task->status = SPDK_BDEV_IO_STATUS_SUCCESS;
|
||||
|
||||
SPDK_INFOLOG(SPDK_LOG_VBDEV_LVOL,
|
||||
"Vbdev doing write at offset %" PRIu64 " using %" PRIu64 " pages on device %s\n", start_page,
|
||||
num_pages, bdev_io->bdev->name);
|
||||
|
@ -467,6 +467,7 @@ spdk_lvol_destroy(struct spdk_lvol *lvol, spdk_lvol_op_complete cb_fn, void *cb_
|
||||
void
|
||||
spdk_bdev_io_complete(struct spdk_bdev_io *bdev_io, enum spdk_bdev_io_status status)
|
||||
{
|
||||
bdev_io->internal.status = status;
|
||||
}
|
||||
|
||||
struct spdk_io_channel *spdk_lvol_get_io_channel(struct spdk_lvol *lvol)
|
||||
@ -1315,17 +1316,16 @@ ut_lvol_read_write(void)
|
||||
g_lvol = calloc(1, sizeof(struct spdk_lvol));
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol != NULL);
|
||||
|
||||
g_task = (struct lvol_task *)g_io->driver_ctx;
|
||||
g_io->bdev = g_base_bdev;
|
||||
g_io->bdev->ctxt = g_lvol;
|
||||
g_io->u.bdev.offset_blocks = 20;
|
||||
g_io->u.bdev.num_blocks = 20;
|
||||
|
||||
lvol_read(g_ch, g_io);
|
||||
CU_ASSERT(g_task->status == SPDK_BDEV_IO_STATUS_SUCCESS);
|
||||
CU_ASSERT(g_io->internal.status = SPDK_BDEV_IO_STATUS_SUCCESS);
|
||||
|
||||
lvol_write(g_lvol, g_ch, g_io);
|
||||
CU_ASSERT(g_task->status == SPDK_BDEV_IO_STATUS_SUCCESS);
|
||||
CU_ASSERT(g_io->internal.status = SPDK_BDEV_IO_STATUS_SUCCESS);
|
||||
|
||||
free(g_io);
|
||||
free(g_base_bdev);
|
||||
|
Loading…
Reference in New Issue
Block a user