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:
parent
974daa68a6
commit
1388d02447
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user