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