lib/bdev: Expose enabled DIF check types of bdev.
This patch is for DIF check types. Add enum spdk_dif_check_type to DIF library. Add a field dif_check_flags to struct spdk_bdev and add spdk_bdev_is_dif_check_enabled to bdev APIs. Added enum is intended to improve usability. If no enum, the caller will have to get raw data of flags and mask each bit. Change-Id: Ia46a37a9684dc968dcc51963674f0a9963e0cd4d Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/c/443339 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
7bb007d206
commit
f4e58a003a
@ -445,6 +445,16 @@ enum spdk_dif_type spdk_bdev_get_dif_type(const struct spdk_bdev *bdev);
|
||||
*/
|
||||
bool spdk_bdev_is_dif_head_of_md(const struct spdk_bdev *bdev);
|
||||
|
||||
/**
|
||||
* Check whether the DIF check type is enabled.
|
||||
*
|
||||
* \param bdev Block device to query.
|
||||
* \param check_type The specific DIF check type.
|
||||
* \return true if enabled, false otherwise.
|
||||
*/
|
||||
bool spdk_bdev_is_dif_check_enabled(const struct spdk_bdev *bdev,
|
||||
enum spdk_dif_check_type check_type);
|
||||
|
||||
/**
|
||||
* Get the most recently measured queue depth from a bdev.
|
||||
*
|
||||
|
@ -320,6 +320,11 @@ struct spdk_bdev {
|
||||
*/
|
||||
bool dif_is_head_of_md;
|
||||
|
||||
/**
|
||||
* Specify whether each DIF check type is enabled.
|
||||
*/
|
||||
uint32_t dif_check_flags;
|
||||
|
||||
/**
|
||||
* Pointer to the bdev module that registered this bdev.
|
||||
*/
|
||||
|
@ -53,6 +53,12 @@ enum spdk_dif_type {
|
||||
SPDK_DIF_TYPE3 = 3,
|
||||
};
|
||||
|
||||
enum spdk_dif_check_type {
|
||||
SPDK_DIF_CHECK_TYPE_REFTAG = 1,
|
||||
SPDK_DIF_CHECK_TYPE_APPTAG = 2,
|
||||
SPDK_DIF_CHECK_TYPE_GUARD = 3,
|
||||
};
|
||||
|
||||
struct spdk_dif {
|
||||
uint16_t guard;
|
||||
uint16_t app_tag;
|
||||
|
@ -2350,6 +2350,26 @@ spdk_bdev_is_dif_head_of_md(const struct spdk_bdev *bdev)
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
spdk_bdev_is_dif_check_enabled(const struct spdk_bdev *bdev,
|
||||
enum spdk_dif_check_type check_type)
|
||||
{
|
||||
if (spdk_bdev_get_dif_type(bdev) == SPDK_DIF_DISABLE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (check_type) {
|
||||
case SPDK_DIF_CHECK_TYPE_REFTAG:
|
||||
return (bdev->dif_check_flags & SPDK_DIF_FLAGS_REFTAG_CHECK) != 0;
|
||||
case SPDK_DIF_CHECK_TYPE_APPTAG:
|
||||
return (bdev->dif_check_flags & SPDK_DIF_FLAGS_APPTAG_CHECK) != 0;
|
||||
case SPDK_DIF_CHECK_TYPE_GUARD:
|
||||
return (bdev->dif_check_flags & SPDK_DIF_FLAGS_GUARD_CHECK) != 0;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t
|
||||
spdk_bdev_get_qd(const struct spdk_bdev *bdev)
|
||||
{
|
||||
|
@ -251,6 +251,14 @@ spdk_rpc_dump_bdev_info(struct spdk_json_write_ctx *w,
|
||||
spdk_json_write_named_uint32(w, "dif_type", spdk_bdev_get_dif_type(bdev));
|
||||
if (spdk_bdev_get_dif_type(bdev) != SPDK_DIF_DISABLE) {
|
||||
spdk_json_write_named_bool(w, "dif_is_head_of_md", spdk_bdev_is_dif_head_of_md(bdev));
|
||||
spdk_json_write_named_object_begin(w, "enabled_dif_check_types");
|
||||
spdk_json_write_named_bool(w, "reftag",
|
||||
spdk_bdev_is_dif_check_enabled(bdev, SPDK_DIF_CHECK_TYPE_REFTAG));
|
||||
spdk_json_write_named_bool(w, "apptag",
|
||||
spdk_bdev_is_dif_check_enabled(bdev, SPDK_DIF_CHECK_TYPE_APPTAG));
|
||||
spdk_json_write_named_bool(w, "guard",
|
||||
spdk_bdev_is_dif_check_enabled(bdev, SPDK_DIF_CHECK_TYPE_GUARD));
|
||||
spdk_json_write_object_end(w);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user