bdev/nvme: Refactor io_type_supported to clarify querying NVMe driver

bdev_nvme_io_type_supported() queries NVMe driver to return if the
specified IO type is supported. To clarify it, cache pointers to
struct spdk_nvme_ctrlr and spdk_nvme_ns.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I0956506e720722216e03cb808f61737ada617329
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5102
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
Shuhei Matsumoto 2020-11-15 07:40:19 +09:00 committed by Tomasz Zawadzki
parent 974daa68a6
commit 1388d02447

View File

@ -760,7 +760,8 @@ static bool
bdev_nvme_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type) bdev_nvme_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type)
{ {
struct nvme_bdev *nbdev = ctx; struct nvme_bdev *nbdev = ctx;
struct nvme_bdev_ns *nvme_ns = nbdev->nvme_ns; struct spdk_nvme_ctrlr *ctrlr = nbdev->nvme_ns->ctrlr->ctrlr;
struct spdk_nvme_ns *ns = nbdev->nvme_ns->ns;
const struct spdk_nvme_ctrlr_data *cdata; const struct spdk_nvme_ctrlr_data *cdata;
switch (io_type) { switch (io_type) {
@ -774,23 +775,23 @@ bdev_nvme_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type)
return true; return true;
case SPDK_BDEV_IO_TYPE_COMPARE: case SPDK_BDEV_IO_TYPE_COMPARE:
return spdk_nvme_ns_supports_compare(nvme_ns->ns); return spdk_nvme_ns_supports_compare(ns);
case SPDK_BDEV_IO_TYPE_NVME_IO_MD: case SPDK_BDEV_IO_TYPE_NVME_IO_MD:
return spdk_nvme_ns_get_md_size(nvme_ns->ns) ? true : false; return spdk_nvme_ns_get_md_size(ns) ? true : false;
case SPDK_BDEV_IO_TYPE_UNMAP: case SPDK_BDEV_IO_TYPE_UNMAP:
cdata = spdk_nvme_ctrlr_get_data(nvme_ns->ctrlr->ctrlr); cdata = spdk_nvme_ctrlr_get_data(ctrlr);
return cdata->oncs.dsm; return cdata->oncs.dsm;
case SPDK_BDEV_IO_TYPE_WRITE_ZEROES: case SPDK_BDEV_IO_TYPE_WRITE_ZEROES:
cdata = spdk_nvme_ctrlr_get_data(nvme_ns->ctrlr->ctrlr); cdata = spdk_nvme_ctrlr_get_data(ctrlr);
/* /*
* If an NVMe controller guarantees reading unallocated blocks returns zero, * If an NVMe controller guarantees reading unallocated blocks returns zero,
* we can implement WRITE_ZEROES as an NVMe deallocate command. * we can implement WRITE_ZEROES as an NVMe deallocate command.
*/ */
if (cdata->oncs.dsm && if (cdata->oncs.dsm &&
spdk_nvme_ns_get_dealloc_logical_block_read_value(nvme_ns->ns) == spdk_nvme_ns_get_dealloc_logical_block_read_value(ns) ==
SPDK_NVME_DEALLOC_READ_00) { SPDK_NVME_DEALLOC_READ_00) {
return true; return true;
} }
@ -802,7 +803,7 @@ bdev_nvme_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type)
return false; return false;
case SPDK_BDEV_IO_TYPE_COMPARE_AND_WRITE: case SPDK_BDEV_IO_TYPE_COMPARE_AND_WRITE:
if (spdk_nvme_ctrlr_get_flags(nvme_ns->ctrlr->ctrlr) & if (spdk_nvme_ctrlr_get_flags(ctrlr) &
SPDK_NVME_CTRLR_COMPARE_AND_WRITE_SUPPORTED) { SPDK_NVME_CTRLR_COMPARE_AND_WRITE_SUPPORTED) {
return true; return true;
} }