]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme-print-binary: fix to output reachability groups log length
authorTokunori Ikegami <ikegami.t@gmail.com>
Sun, 16 Feb 2025 06:18:38 +0000 (15:18 +0900)
committerDaniel Wagner <wagi@monom.org>
Mon, 17 Feb 2025 14:39:11 +0000 (15:39 +0100)
Previously only the log header output since the log length is changeable.
The changes to output the changeable log length correctly.

Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
nvme-print-binary.c
nvme-print-json.c
nvme-print-stdout.c
nvme-print.c
nvme-print.h
nvme.c

index fb2e087a00782a4d8e2005f7c9076d53f8b31367..bc88743b7bc655f524b9dc288b0fa43877baf887 100644 (file)
@@ -322,9 +322,9 @@ static void binary_dispersed_ns_psub_log(struct nvme_dispersed_ns_participating_
        d_raw((unsigned char *)log, sizeof(*log));
 }
 
-static void binary_reachability_groups_log(struct nvme_reachability_groups_log *log)
+static void binary_reachability_groups_log(struct nvme_reachability_groups_log *log, __u64 len)
 {
-       d_raw((unsigned char *)log, sizeof(*log));
+       d_raw((unsigned char *)log, len);
 }
 
 static void binary_reachability_associations_log(struct nvme_reachability_associations_log *log,
index fe01ca4666240870edd253dadd2bccc0214fa6dc..821258c11ac956ffa6c48ac47af3fabe2c85824c 100644 (file)
@@ -4684,7 +4684,7 @@ static void json_dispersed_ns_psub_log(struct nvme_dispersed_ns_participating_ns
        json_print(r);
 }
 
-static void json_reachability_groups_log(struct nvme_reachability_groups_log *log)
+static void json_reachability_groups_log(struct nvme_reachability_groups_log *log, __u64 len UNUSED)
 {
        struct json_object *r = json_create_object();
        __u16 i;
index 3481369d6d47014a5cecde2ac6022aaae348f708..66308c653e76d425cca87aa3e105f5dd2c08b549 100644 (file)
@@ -5657,11 +5657,12 @@ static void stdout_dispersed_ns_psub_log(struct nvme_dispersed_ns_participating_
                       &log->participating_nss[i * NVME_NQN_LENGTH]);
 }
 
-static void stdout_reachability_groups_log(struct nvme_reachability_groups_log *log)
+static void stdout_reachability_groups_log(struct nvme_reachability_groups_log *log, __u64 len)
 {
        __u16 i;
        __u32 j;
 
+       print_debug("len: %"PRIu64"\n", (uint64_t)len);
        printf("chngc: %"PRIu64"\n", le64_to_cpu(log->chngc));
        printf("nrgd: %u\n", le16_to_cpu(log->nrgd));
 
index 69cdeb2354fb0c4c0bef0b6d5d4ab58dd6989d9f..a766c1e53cf9463559abc650453f203c4fa0d393 100644 (file)
@@ -1510,9 +1510,9 @@ void nvme_show_dispersed_ns_psub_log(struct nvme_dispersed_ns_participating_nss_
 }
 
 void nvme_show_reachability_groups_log(struct nvme_reachability_groups_log *log,
-                                      nvme_print_flags_t flags)
+                                      __u64 len, nvme_print_flags_t flags)
 {
-       nvme_print(reachability_groups_log, flags, log);
+       nvme_print(reachability_groups_log, flags, log, len);
 }
 
 void nvme_show_reachability_associations_log(struct nvme_reachability_associations_log *log,
index e43883e4fe96fcb5061fa17c7d72f495e4f64862..37d90f5f9930cb5fd890b88d144f8207147285a8 100644 (file)
@@ -91,7 +91,7 @@ struct print_ops {
        void (*mgmt_addr_list_log)(struct nvme_mgmt_addr_list_log *ma_log);
        void (*rotational_media_info_log)(struct nvme_rotational_media_info_log *info);
        void (*dispersed_ns_psub_log)(struct nvme_dispersed_ns_participating_nss_log *log);
-       void (*reachability_groups_log)(struct nvme_reachability_groups_log *log);
+       void (*reachability_groups_log)(struct nvme_reachability_groups_log *log, __u64 len);
        void (*reachability_associations_log)(struct nvme_reachability_associations_log *log,
                                              __u64 len);
 
@@ -342,7 +342,7 @@ void nvme_show_rotational_media_info_log(struct nvme_rotational_media_info_log *
 void nvme_show_dispersed_ns_psub_log(struct nvme_dispersed_ns_participating_nss_log *log,
                                     nvme_print_flags_t flags);
 void nvme_show_reachability_groups_log(struct nvme_reachability_groups_log *log,
-                                      nvme_print_flags_t flags);
+                                      __u64 len, nvme_print_flags_t flags);
 void nvme_show_reachability_associations_log(struct nvme_reachability_associations_log *log,
                                             __u64 len, nvme_print_flags_t flags);
 #endif /* NVME_PRINT_H */
diff --git a/nvme.c b/nvme.c
index c6a0515d7875822412e15133f2e959a115f2f2c0..0c9be68d294e4009034f5621e9bc513c2c20f295 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -10390,7 +10390,7 @@ static int get_log_offset(struct nvme_dev *dev, struct nvme_get_log_args *args,
 }
 
 static int get_reachability_group_desc(struct nvme_dev *dev, struct nvme_get_log_args *args,
-                                      __u64 offset, struct nvme_reachability_groups_log **logp)
+                                      __u64 *offset, struct nvme_reachability_groups_log **logp)
 {
        int err;
        struct nvme_reachability_groups_log *log = *logp;
@@ -10399,11 +10399,11 @@ static int get_reachability_group_desc(struct nvme_dev *dev, struct nvme_get_log
 
        for (i = 0; i < le16_to_cpu(log->nrgd); i++) {
                len = sizeof(*log->rgd);
-               err = get_log_offset(dev, args, &offset, len, (void **)&log);
+               err = get_log_offset(dev, args, offset, len, (void **)&log);
                if (err)
                        goto err_free;
                len = le32_to_cpu(log->rgd[i].nnid) * sizeof(*log->rgd[i].nsid);
-               err = get_log_offset(dev, args, &offset, len, (void **)&log);
+               err = get_log_offset(dev, args, offset, len, (void **)&log);
                if (err)
                        goto err_free;
        }
@@ -10418,7 +10418,8 @@ err_free:
 }
 
 static int get_reachability_groups(struct nvme_dev *dev, bool rgo, bool rae,
-                                  struct nvme_reachability_groups_log **logp)
+                                  struct nvme_reachability_groups_log **logp,
+                                  __u64 *lenp)
 {
        int err;
        struct nvme_reachability_groups_log *log;
@@ -10441,11 +10442,12 @@ static int get_reachability_groups(struct nvme_dev *dev, bool rgo, bool rae,
        if (err)
                goto err_free;
 
-       err = get_reachability_group_desc(dev, &args, log_len, &log);
+       err = get_reachability_group_desc(dev, &args, &log_len, &log);
        if (err)
                goto err_free;
 
        *logp = log;
+       *lenp = log_len;
        return 0;
 
 err_free:
@@ -10460,6 +10462,7 @@ static int get_reachability_groups_log(int argc, char **argv, struct command *cm
        const char *rgo = "Return Groups Only";
        nvme_print_flags_t flags;
        int err;
+       __u64 len = 0;
 
        _cleanup_free_ struct nvme_reachability_groups_log *log = NULL;
 
@@ -10489,9 +10492,9 @@ static int get_reachability_groups_log(int argc, char **argv, struct command *cm
                return err;
        }
 
-       err = get_reachability_groups(dev, cfg.rgo, cfg.rae, &log);
+       err = get_reachability_groups(dev, cfg.rgo, cfg.rae, &log, &len);
        if (!err)
-               nvme_show_reachability_groups_log(log, flags);
+               nvme_show_reachability_groups_log(log, len, flags);
        else if (err > 0)
                nvme_show_status(err);
        else