From: Tokunori Ikegami Date: Thu, 13 Oct 2022 16:13:22 +0000 (+0900) Subject: nvme: Fix set feature command to get feature identifier 0Dh length as zero X-Git-Tag: v2.2~13^2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=7e275bf7eebb1b9175a697b62aac7f2e5872e9de;p=users%2Fsagi%2Fnvme-cli.git nvme: Fix set feature command to get feature identifier 0Dh length as zero The nvme_get_feature_length() function does not handle the direction information correctly. Thus libnvme introduced a new version of this function. Use it when available. Signed-off-by: Tokunori Ikegami [dwagner: Add wrapper code when nvme_get_feature_length2 is not available] Signed-off-by: Daniel Wagner --- diff --git a/libnvme-wrap.c b/libnvme-wrap.c index c3c6dd22..bbd86009 100644 --- a/libnvme-wrap.c +++ b/libnvme-wrap.c @@ -6,6 +6,7 @@ */ #include +#include #include @@ -40,3 +41,10 @@ VOID_FN(nvme_init_copy_range_f1, __u64 *slbas, __u64 *eilbrts, __u32 *elbatms, __u32 *elbats, __u16 nr), ARGS(copy, nlbs, slbas, eilbrts, elbatms, elbats, nr)) + +FN(nvme_get_feature_length2, + int, + PROTO(int fid, __u32 cdw11, enum nvme_data_tfr dir, + __u32 *len), + ARGS(fid, cdw11, dir, len), + -EEXIST) diff --git a/nvme-wrap.c b/nvme-wrap.c index 63274fe4..c31ec111 100644 --- a/nvme-wrap.c +++ b/nvme-wrap.c @@ -350,3 +350,13 @@ int nvme_cli_ns_mgmt_create(struct nvme_dev *dev, struct nvme_id_ns *ns, return -ENODEV; } +int nvme_cli_get_feature_length2(int fid, __u32 cdw11, enum nvme_data_tfr dir, + __u32 *len) +{ + int err; + + err = nvme_get_feature_length2(fid, cdw11, dir, len); + if (err != -EEXIST) + return err; + return nvme_get_feature_length(fid, cdw11, len); +} diff --git a/nvme-wrap.h b/nvme-wrap.h index db76ba65..fe893916 100644 --- a/nvme-wrap.h +++ b/nvme-wrap.h @@ -118,4 +118,8 @@ int nvme_cli_fw_download(struct nvme_dev *dev, int nvme_cli_fw_commit(struct nvme_dev *dev, struct nvme_fw_commit_args *args); + +int nvme_cli_get_feature_length2(int fid, __u32 cdw11, enum nvme_data_tfr dir, + __u32 *len); + #endif /* _NVME_WRAP_H */ diff --git a/nvme.c b/nvme.c index 4dac135a..ec0543e6 100644 --- a/nvme.c +++ b/nvme.c @@ -5128,8 +5128,9 @@ static int set_feature(int argc, char **argv, struct command *cmd, struct plugin } if (!cfg.data_len) - nvme_get_feature_length(cfg.feature_id, cfg.value, - &cfg.data_len); + nvme_cli_get_feature_length2(cfg.feature_id, cfg.value, + NVME_DATA_TFR_HOST_TO_CTRL, + &cfg.data_len); if (cfg.data_len) { if (posix_memalign(&buf, getpagesize(), cfg.data_len)) {