bdev/ocssd: Pass nvme_io_channel instead of spdk_io_channel to I/O functions

Except for bdev_ocssd_submit_request(), we can pass nvme_ch instead
of ch to I/O functions, and do the change in this patch.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ia9e09300d053fa80ada8286c8df7ec689bdb9aaf
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4527
Community-CI: Broadcom CI
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
Shuhei Matsumoto 2020-10-14 22:07:53 +09:00 committed by Tomasz Zawadzki
parent 37cc052a6c
commit 405ae5eaae

View File

@ -378,11 +378,10 @@ bdev_ocssd_read_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
}
static int
bdev_ocssd_read(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
bdev_ocssd_read(struct nvme_io_channel *nvme_ch, struct spdk_bdev_io *bdev_io)
{
struct ocssd_bdev *ocssd_bdev = bdev_io->bdev->ctxt;
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
struct nvme_io_channel *nvme_ch = spdk_io_channel_get_ctx(ch);
struct bdev_ocssd_io *ocdev_io = (struct bdev_ocssd_io *)bdev_io->driver_ctx;
const size_t zone_size = nvme_bdev->disk.zone_size;
uint64_t lba;
@ -425,11 +424,10 @@ bdev_ocssd_write_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
}
static int
bdev_ocssd_write(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
bdev_ocssd_write(struct nvme_io_channel *nvme_ch, struct spdk_bdev_io *bdev_io)
{
struct ocssd_bdev *ocssd_bdev = bdev_io->bdev->ctxt;
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
struct nvme_io_channel *nvme_ch = spdk_io_channel_get_ctx(ch);
struct bdev_ocssd_io *ocdev_io = (struct bdev_ocssd_io *)bdev_io->driver_ctx;
const size_t zone_size = nvme_bdev->disk.zone_size;
uint64_t lba;
@ -463,11 +461,10 @@ bdev_ocssd_write(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
}
static int
bdev_ocssd_zone_append(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
bdev_ocssd_zone_append(struct nvme_io_channel *nvme_ch, struct spdk_bdev_io *bdev_io)
{
struct ocssd_bdev *ocssd_bdev = bdev_io->bdev->ctxt;
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
struct nvme_io_channel *nvme_ch = spdk_io_channel_get_ctx(ch);
struct bdev_ocssd_io *ocdev_io = (struct bdev_ocssd_io *)bdev_io->driver_ctx;
struct bdev_ocssd_zone *zone;
uint64_t lba;
@ -511,6 +508,7 @@ out:
static void
bdev_ocssd_io_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io, bool success)
{
struct nvme_io_channel *nvme_ch = spdk_io_channel_get_ctx(ch);
int rc;
if (!success) {
@ -518,7 +516,7 @@ bdev_ocssd_io_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_i
return;
}
rc = bdev_ocssd_read(ch, bdev_io);
rc = bdev_ocssd_read(nvme_ch, bdev_io);
if (spdk_likely(rc != 0)) {
if (rc == -ENOMEM) {
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_NOMEM);
@ -540,12 +538,11 @@ bdev_ocssd_reset_zone_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
}
static int
bdev_ocssd_reset_zone(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io,
bdev_ocssd_reset_zone(struct nvme_io_channel *nvme_ch, struct spdk_bdev_io *bdev_io,
uint64_t slba, size_t num_zones)
{
struct ocssd_bdev *ocssd_bdev = bdev_io->bdev->ctxt;
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
struct nvme_io_channel *nvme_ch = spdk_io_channel_get_ctx(ch);
struct bdev_ocssd_io *ocdev_io = (struct bdev_ocssd_io *)bdev_io->driver_ctx;
uint64_t offset, zone_size = nvme_bdev->disk.zone_size;
int rc;
@ -685,11 +682,11 @@ bdev_ocssd_get_zone_info(struct spdk_bdev_io *bdev_io)
}
static int
bdev_ocssd_zone_management(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
bdev_ocssd_zone_management(struct nvme_io_channel *nvme_ch, struct spdk_bdev_io *bdev_io)
{
switch (bdev_io->u.zone_mgmt.zone_action) {
case SPDK_BDEV_ZONE_RESET:
return bdev_ocssd_reset_zone(ch, bdev_io, bdev_io->u.zone_mgmt.zone_id,
return bdev_ocssd_reset_zone(nvme_ch, bdev_io, bdev_io->u.zone_mgmt.zone_id,
bdev_io->u.zone_mgmt.num_zones);
default:
return -EINVAL;
@ -701,14 +698,12 @@ static void bdev_ocssd_submit_request(struct spdk_io_channel *ch, struct spdk_bd
static int
bdev_ocssd_poll_pending(void *ctx)
{
struct spdk_io_channel *ch = ctx;
struct nvme_io_channel *nvme_ch;
struct nvme_io_channel *nvme_ch = ctx;
struct ocssd_io_channel *ocssd_ch;
struct spdk_bdev_io *bdev_io;
TAILQ_HEAD(, spdk_bdev_io) pending_requests;
int num_requests = 0;
nvme_ch = spdk_io_channel_get_ctx(ch);
ocssd_ch = nvme_ch->ocssd_ch;
TAILQ_INIT(&pending_requests);
@ -716,7 +711,7 @@ bdev_ocssd_poll_pending(void *ctx)
while ((bdev_io = TAILQ_FIRST(&pending_requests))) {
TAILQ_REMOVE(&pending_requests, bdev_io, module_link);
bdev_ocssd_submit_request(ch, bdev_io);
bdev_ocssd_submit_request(spdk_io_channel_from_ctx(nvme_ch), bdev_io);
num_requests++;
}
@ -740,6 +735,8 @@ bdev_ocssd_delay_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_i
static int
_bdev_ocssd_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io)
{
struct nvme_io_channel *nvme_ch = spdk_io_channel_get_ctx(ch);
switch (bdev_io->type) {
case SPDK_BDEV_IO_TYPE_READ:
spdk_bdev_io_get_buf(bdev_io, bdev_ocssd_io_get_buf_cb,
@ -747,16 +744,16 @@ _bdev_ocssd_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev
return 0;
case SPDK_BDEV_IO_TYPE_WRITE:
return bdev_ocssd_write(ch, bdev_io);
return bdev_ocssd_write(nvme_ch, bdev_io);
case SPDK_BDEV_IO_TYPE_ZONE_MANAGEMENT:
return bdev_ocssd_zone_management(ch, bdev_io);
return bdev_ocssd_zone_management(nvme_ch, bdev_io);
case SPDK_BDEV_IO_TYPE_GET_ZONE_INFO:
return bdev_ocssd_get_zone_info(bdev_io);
case SPDK_BDEV_IO_TYPE_ZONE_APPEND:
return bdev_ocssd_zone_append(ch, bdev_io);
return bdev_ocssd_zone_append(nvme_ch, bdev_io);
default:
return -EINVAL;
@ -1447,8 +1444,7 @@ bdev_ocssd_create_io_channel(struct nvme_io_channel *nvme_ch)
return -ENOMEM;
}
ocssd_ch->pending_poller = SPDK_POLLER_REGISTER(bdev_ocssd_poll_pending,
spdk_io_channel_from_ctx(nvme_ch), 0);
ocssd_ch->pending_poller = SPDK_POLLER_REGISTER(bdev_ocssd_poll_pending, nvme_ch, 0);
if (ocssd_ch->pending_poller == NULL) {
SPDK_ERRLOG("Failed to register pending requests poller\n");
free(ocssd_ch);