]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme: Filter out status flags for get feature command
authorTokunori Ikegami <ikegami.t@gmail.com>
Wed, 1 Feb 2023 16:57:35 +0000 (01:57 +0900)
committerTokunori Ikegami <ikegami.t@gmail.com>
Tue, 7 Feb 2023 14:00:52 +0000 (23:00 +0900)
Since previously unnecessary DNR, M and CRD status fields were checked.

Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
nvme.c

diff --git a/nvme.c b/nvme.c
index 350e8239d0b5f53ba08e1e53bca135a5ebad8434..ea47e7211e520a0f89df76a173b57772c3ad3749 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -4450,6 +4450,12 @@ static int get_feature_id(struct nvme_dev *dev, struct feat_cfg *cfg,
        return nvme_cli_get_features(dev, &args);
 }
 
+static int filter_out_flags(int status)
+{
+       return status & (NVME_GET(NVME_SCT_MASK, SCT) |
+                        NVME_GET(NVME_SC_MASK, SC));
+}
+
 static void get_feature_id_print(struct feat_cfg cfg, int err, __u32 result,
                                 void *buf)
 {
@@ -4471,7 +4477,8 @@ static void get_feature_id_print(struct feat_cfg cfg, int err, __u32 result,
                        d_raw(buf, cfg.data_len);
                }
        } else if (err > 0) {
-               if (!nvme_status_equals(err, NVME_STATUS_TYPE_NVME,
+               if (!nvme_status_equals(filter_out_flags(err),
+                                       NVME_STATUS_TYPE_NVME,
                                        NVME_SC_INVALID_FIELD))
                        nvme_show_status(err);
        } else {
@@ -4529,12 +4536,14 @@ static int get_feature_ids(struct nvme_dev *dev, struct feat_cfg cfg)
        for (i = cfg.feature_id; i < feat_max; i++, feat_num++) {
                cfg.feature_id = i;
                err = get_feature_id_changed(dev, cfg, changed);
-               if (err && !nvme_status_equals(err, NVME_STATUS_TYPE_NVME,
+               if (err && !nvme_status_equals(filter_out_flags(err),
+                                              NVME_STATUS_TYPE_NVME,
                                               NVME_SC_INVALID_FIELD))
                        break;
        }
 
-       if (feat_num == 1 && nvme_status_equals(err, NVME_STATUS_TYPE_NVME,
+       if (feat_num == 1 && nvme_status_equals(filter_out_flags(err),
+                                               NVME_STATUS_TYPE_NVME,
                                                NVME_SC_INVALID_FIELD))
                nvme_show_status(err);