bdev/ocssd: Add a helper function to get zone_size from ocssd_bdev
Add a small helper function bdev_ocssd_get_zone_size() to get zone_size directly from ocssd_bdev. We do not need to cache nvme_bdev to get zone_size by this helper function. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I8a6fffac6efaff2cb4cc872c19d85e8e504c5622 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5561 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:
parent
dd3297bf57
commit
a9d2ef69c5
@ -186,6 +186,12 @@ static struct spdk_bdev_module ocssd_if = {
|
||||
|
||||
SPDK_BDEV_MODULE_REGISTER(ocssd, &ocssd_if);
|
||||
|
||||
static inline uint64_t
|
||||
bdev_ocssd_get_zone_size(const struct ocssd_bdev *ocssd_bdev)
|
||||
{
|
||||
return ocssd_bdev->nvme_bdev.disk.zone_size;
|
||||
}
|
||||
|
||||
static uint64_t
|
||||
bdev_ocssd_num_zones(const struct ocssd_bdev *ocssd_bdev)
|
||||
{
|
||||
@ -415,10 +421,9 @@ bdev_ocssd_read(struct ocssd_bdev *ocssd_bdev, 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 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 = nvme_bdev->disk.zone_size;
|
||||
const size_t zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
|
||||
|
||||
if ((lba % zone_size) + lba_count > zone_size) {
|
||||
SPDK_ERRLOG("Tried to cross zone boundary during read command\n");
|
||||
@ -457,10 +462,9 @@ bdev_ocssd_write(struct ocssd_bdev *ocssd_bdev, 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 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 = nvme_bdev->disk.zone_size;
|
||||
const size_t zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
|
||||
struct bdev_ocssd_zone *zone;
|
||||
int rc;
|
||||
|
||||
@ -598,10 +602,9 @@ static int
|
||||
bdev_ocssd_reset_zone(struct ocssd_bdev *ocssd_bdev, struct spdk_nvme_qpair *qpair,
|
||||
struct bdev_ocssd_io *ocdev_io, uint64_t slba, size_t num_zones)
|
||||
{
|
||||
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
||||
struct nvme_bdev_ns *nvme_ns = nvme_bdev->nvme_ns;
|
||||
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 = nvme_bdev->disk.zone_size;
|
||||
uint64_t offset, zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
|
||||
struct bdev_ocssd_zone *zone;
|
||||
int rc;
|
||||
|
||||
@ -640,7 +643,7 @@ bdev_ocssd_fill_zone_info(struct ocssd_bdev *ocssd_bdev, struct bdev_ocssd_ns *o
|
||||
struct spdk_bdev_zone_info *zone_info,
|
||||
const struct spdk_ocssd_chunk_information_entry *chunk_info)
|
||||
{
|
||||
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
||||
uint64_t zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
|
||||
|
||||
zone_info->zone_id = bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, chunk_info->slba);
|
||||
zone_info->write_pointer = zone_info->zone_id;
|
||||
@ -651,7 +654,7 @@ bdev_ocssd_fill_zone_info(struct ocssd_bdev *ocssd_bdev, struct bdev_ocssd_ns *o
|
||||
zone_info->state = SPDK_BDEV_ZONE_STATE_FULL;
|
||||
} else if (chunk_info->cs.open) {
|
||||
zone_info->state = SPDK_BDEV_ZONE_STATE_OPEN;
|
||||
zone_info->write_pointer += chunk_info->wp % nvme_bdev->disk.zone_size;
|
||||
zone_info->write_pointer += chunk_info->wp % zone_size;
|
||||
} else if (chunk_info->cs.offline) {
|
||||
zone_info->state = SPDK_BDEV_ZONE_STATE_OFFLINE;
|
||||
} else {
|
||||
@ -662,7 +665,7 @@ bdev_ocssd_fill_zone_info(struct ocssd_bdev *ocssd_bdev, struct bdev_ocssd_ns *o
|
||||
if (chunk_info->ct.size_deviate) {
|
||||
zone_info->capacity = chunk_info->cnlb;
|
||||
} else {
|
||||
zone_info->capacity = nvme_bdev->disk.zone_size;
|
||||
zone_info->capacity = zone_size;
|
||||
}
|
||||
}
|
||||
|
||||
@ -708,12 +711,11 @@ static int
|
||||
_bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvme_ch,
|
||||
struct bdev_ocssd_io *ocdev_io, uint64_t zone_id)
|
||||
{
|
||||
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
||||
struct nvme_bdev_ns *nvme_ns = nvme_bdev->nvme_ns;
|
||||
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;
|
||||
uint64_t lba, offset, zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
|
||||
|
||||
lba = zone_id + ocdev_io->zone_info.chunk_offset * nvme_bdev->disk.zone_size;
|
||||
lba = zone_id + ocdev_io->zone_info.chunk_offset * zone_size;
|
||||
offset = bdev_ocssd_to_chunk_info_offset(ocssd_bdev, ocssd_ns, lba);
|
||||
|
||||
return spdk_nvme_ctrlr_cmd_get_log_page(nvme_ch->ctrlr->ctrlr,
|
||||
@ -729,14 +731,14 @@ static int
|
||||
bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvme_ch,
|
||||
struct bdev_ocssd_io *ocdev_io, uint64_t zone_id, uint32_t num_zones)
|
||||
{
|
||||
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
||||
uint64_t zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
|
||||
|
||||
if (num_zones < 1) {
|
||||
SPDK_ERRLOG("Invalid number of zones: %"PRIu32"\n", num_zones);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (zone_id % nvme_bdev->disk.zone_size != 0) {
|
||||
if (zone_id % zone_size != 0) {
|
||||
SPDK_ERRLOG("Unaligned zone LBA: %"PRIu64"\n", zone_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user