bdev/ocssd: Pass nvme_bdev_ns to each I/O submit functions

This change clarifies and simplifies the code when we support ANA
multipath because nvme_bdev and nvme_bdev_ns are not associate
directly and nvme_bdev_ns is got from nvme_bdev_subsystem instead.

As a result of this change, remove bdev_ocssd_get_ns_from_bdev()
because it is not used anymore.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I17a6eb4c63aa99e3537d7ad6ce134277c32e8d3e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5562
Community-CI: Broadcom CI
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
Shuhei Matsumoto 2020-12-14 07:45:18 +09:00 committed by Tomasz Zawadzki
parent a9d2ef69c5
commit b8c15b044c

View File

@ -106,12 +106,6 @@ bdev_ocssd_get_ns_from_nvme(struct nvme_bdev_ns *nvme_ns)
return nvme_ns->type_ctx;
}
static struct bdev_ocssd_ns *
bdev_ocssd_get_ns_from_bdev(struct ocssd_bdev *ocssd_bdev)
{
return bdev_ocssd_get_ns_from_nvme(ocssd_bdev->nvme_bdev.nvme_ns);
}
static int
bdev_ocssd_library_init(void)
{
@ -417,11 +411,11 @@ bdev_ocssd_read_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
}
static int
bdev_ocssd_read(struct ocssd_bdev *ocssd_bdev, struct spdk_nvme_qpair *qpair,
bdev_ocssd_read(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_ns,
struct spdk_nvme_qpair *qpair,
struct bdev_ocssd_io *ocdev_io, struct iovec *iov, int iovcnt,
void *md, uint64_t lba_count, uint64_t lba)
{
struct nvme_bdev_ns *nvme_ns = ocssd_bdev->nvme_bdev.nvme_ns;
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
const size_t zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
@ -458,11 +452,11 @@ bdev_ocssd_write_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
}
static int
bdev_ocssd_write(struct ocssd_bdev *ocssd_bdev, struct spdk_nvme_qpair *qpair,
bdev_ocssd_write(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_ns,
struct spdk_nvme_qpair *qpair,
struct bdev_ocssd_io *ocdev_io, struct iovec *iov, int iovcnt,
void *md, uint64_t lba_count, uint64_t lba)
{
struct nvme_bdev_ns *nvme_ns = ocssd_bdev->nvme_bdev.nvme_ns;
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
const size_t zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
struct bdev_ocssd_zone *zone;
@ -512,12 +506,11 @@ bdev_ocssd_append_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
}
static int
bdev_ocssd_zone_append(struct ocssd_bdev *ocssd_bdev, struct spdk_nvme_qpair *qpair,
bdev_ocssd_zone_append(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_ns,
struct spdk_nvme_qpair *qpair,
struct bdev_ocssd_io *ocdev_io, struct iovec *iov, int iovcnt,
void *md, uint64_t lba_count, uint64_t lba)
{
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
struct nvme_bdev_ns *nvme_ns = nvme_bdev->nvme_ns;
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
struct bdev_ocssd_zone *zone;
int rc = 0;
@ -561,6 +554,8 @@ out:
static void
bdev_ocssd_io_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io, bool success)
{
struct ocssd_bdev *ocssd_bdev = (struct ocssd_bdev *)bdev_io->bdev->ctxt;
struct nvme_bdev_ns *nvme_ns = ocssd_bdev->nvme_bdev.nvme_ns;
struct nvme_io_channel *nvme_ch = spdk_io_channel_get_ctx(ch);
int rc;
@ -569,7 +564,8 @@ bdev_ocssd_io_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_i
return;
}
rc = bdev_ocssd_read((struct ocssd_bdev *)bdev_io->bdev->ctxt,
rc = bdev_ocssd_read(ocssd_bdev,
nvme_ns,
nvme_ch->qpair,
(struct bdev_ocssd_io *)bdev_io->driver_ctx,
bdev_io->u.bdev.iovs,
@ -599,10 +595,10 @@ bdev_ocssd_reset_zone_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
}
static int
bdev_ocssd_reset_zone(struct ocssd_bdev *ocssd_bdev, struct spdk_nvme_qpair *qpair,
bdev_ocssd_reset_zone(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_ns,
struct spdk_nvme_qpair *qpair,
struct bdev_ocssd_io *ocdev_io, uint64_t slba, size_t num_zones)
{
struct nvme_bdev_ns *nvme_ns = ocssd_bdev->nvme_bdev.nvme_ns;
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
uint64_t offset, zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
struct bdev_ocssd_zone *zone;
@ -635,7 +631,8 @@ bdev_ocssd_reset_zone(struct ocssd_bdev *ocssd_bdev, struct spdk_nvme_qpair *qpa
return rc;
}
static int _bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvme_ch,
static int _bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_ns,
struct nvme_io_channel *nvme_ch,
struct bdev_ocssd_io *ocdev_io, uint64_t zone_id);
static void
@ -676,7 +673,8 @@ bdev_ocssd_zone_info_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
struct spdk_ocssd_chunk_information_entry *chunk_info = &ocdev_io->zone_info.chunk_info;
struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(ctx);
struct ocssd_bdev *ocssd_bdev = bdev_io->bdev->ctxt;
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_bdev(ocssd_bdev);
struct nvme_bdev_ns *nvme_ns = ocssd_bdev->nvme_bdev.nvme_ns;
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
struct spdk_bdev_zone_info *zone_info;
struct nvme_io_channel *nvme_ch;
int rc;
@ -695,7 +693,7 @@ bdev_ocssd_zone_info_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
} else {
nvme_ch = spdk_io_channel_get_ctx(spdk_bdev_io_get_io_channel(bdev_io));
rc = _bdev_ocssd_get_zone_info(ocssd_bdev, nvme_ch, ocdev_io,
rc = _bdev_ocssd_get_zone_info(ocssd_bdev, nvme_ns, nvme_ch, ocdev_io,
bdev_io->u.zone_mgmt.zone_id);
if (spdk_unlikely(rc != 0)) {
if (rc == -ENOMEM) {
@ -708,10 +706,10 @@ bdev_ocssd_zone_info_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
}
static int
_bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvme_ch,
_bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_ns,
struct nvme_io_channel *nvme_ch,
struct bdev_ocssd_io *ocdev_io, uint64_t zone_id)
{
struct nvme_bdev_ns *nvme_ns = ocssd_bdev->nvme_bdev.nvme_ns;
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
uint64_t lba, offset, zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
@ -728,7 +726,8 @@ _bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel
}
static int
bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvme_ch,
bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_ns,
struct nvme_io_channel *nvme_ch,
struct bdev_ocssd_io *ocdev_io, uint64_t zone_id, uint32_t num_zones)
{
uint64_t zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
@ -745,16 +744,17 @@ bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *
ocdev_io->zone_info.chunk_offset = 0;
return _bdev_ocssd_get_zone_info(ocssd_bdev, nvme_ch, ocdev_io, zone_id);
return _bdev_ocssd_get_zone_info(ocssd_bdev, nvme_ns, nvme_ch, ocdev_io, zone_id);
}
static int
bdev_ocssd_zone_management(struct ocssd_bdev *ocssd_bdev, struct spdk_nvme_qpair *qpair,
struct spdk_bdev_io *bdev_io)
bdev_ocssd_zone_management(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_ns,
struct spdk_nvme_qpair *qpair, struct spdk_bdev_io *bdev_io)
{
switch (bdev_io->u.zone_mgmt.zone_action) {
case SPDK_BDEV_ZONE_RESET:
return bdev_ocssd_reset_zone(ocssd_bdev,
nvme_ns,
qpair,
(struct bdev_ocssd_io *)bdev_io->driver_ctx,
bdev_io->u.zone_mgmt.zone_id,
@ -808,12 +808,14 @@ _bdev_ocssd_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev
{
struct nvme_io_channel *nvme_ch = spdk_io_channel_get_ctx(ch);
struct ocssd_bdev *ocssd_bdev = (struct ocssd_bdev *)bdev_io->bdev->ctxt;
struct nvme_bdev_ns *nvme_ns = ocssd_bdev->nvme_bdev.nvme_ns;
struct bdev_ocssd_io *ocdev_io = (struct bdev_ocssd_io *)bdev_io->driver_ctx;
switch (bdev_io->type) {
case SPDK_BDEV_IO_TYPE_READ:
if (bdev_io->u.bdev.iovs && bdev_io->u.bdev.iovs[0].iov_base) {
return bdev_ocssd_read(ocssd_bdev,
nvme_ns,
nvme_ch->qpair,
ocdev_io,
bdev_io->u.bdev.iovs,
@ -829,6 +831,7 @@ _bdev_ocssd_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev
case SPDK_BDEV_IO_TYPE_WRITE:
return bdev_ocssd_write(ocssd_bdev,
nvme_ns,
nvme_ch->qpair,
ocdev_io,
bdev_io->u.bdev.iovs,
@ -838,10 +841,11 @@ _bdev_ocssd_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev
bdev_io->u.bdev.offset_blocks);
case SPDK_BDEV_IO_TYPE_ZONE_MANAGEMENT:
return bdev_ocssd_zone_management(ocssd_bdev, nvme_ch->qpair, bdev_io);
return bdev_ocssd_zone_management(ocssd_bdev, nvme_ns, nvme_ch->qpair, bdev_io);
case SPDK_BDEV_IO_TYPE_GET_ZONE_INFO:
return bdev_ocssd_get_zone_info(ocssd_bdev,
nvme_ns,
nvme_ch,
ocdev_io,
bdev_io->u.zone_mgmt.zone_id,
@ -849,6 +853,7 @@ _bdev_ocssd_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev
case SPDK_BDEV_IO_TYPE_ZONE_APPEND:
return bdev_ocssd_zone_append(ocssd_bdev,
nvme_ns,
nvme_ch->qpair,
ocdev_io,
bdev_io->u.bdev.iovs,