Skip to content

Commit 3b4a4a1

Browse files
ikegami-tigaw
authored andcommitted
nvme-print-json: output actual lbaf data size for verbose mode
Also add lbaf and in_use outputs for both normal and verbose modes. Signed-off-by: Tokunori Ikegami <[email protected]>
1 parent d108096 commit 3b4a4a1

File tree

1 file changed

+30
-9
lines changed

1 file changed

+30
-9
lines changed

nvme-print-json.c

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "util/logging.h"
1515
#include "nvme.h"
1616
#include "common.h"
17+
#include "libnvme.h"
1718

1819
#define ERROR_MSG_LEN 100
1920
#define NAME_LEN 128
@@ -40,6 +41,7 @@
4041
#define obj_add_nprix64 json_object_add_nprix64
4142
#define obj_add_uint_0nx json_object_add_uint_0nx
4243
#define obj_add_0nprix64 json_object_add_0nprix64
44+
#define obj_add_string json_object_add_string
4345

4446
static const uint8_t zero_uuid[16] = { 0 };
4547
static struct print_ops json_print_ops;
@@ -224,6 +226,32 @@ static void json_id_iocs(struct nvme_id_iocs *iocs)
224226
json_print(r);
225227
}
226228

229+
static void json_nvme_id_ns_lbaf(struct nvme_id_ns *ns, int i, struct json_object *lbafs)
230+
{
231+
struct json_object *lbaf = json_create_object();
232+
__u8 flbas;
233+
234+
nvme_id_ns_flbas_to_lbaf_inuse(ns->flbas, &flbas);
235+
236+
if (verbose_mode()) {
237+
obj_add_int(lbaf, "LBA Format", i);
238+
obj_add_string(lbaf, "Metadata Size", "%d bytes", le16_to_cpu(ns->lbaf[i].ms));
239+
obj_add_string(lbaf, "Data Size", "%d bytes", 1 << ns->lbaf[i].ds);
240+
obj_add_string(lbaf, "Relative Performance", "0x%x %s", ns->lbaf[i].rp,
241+
ns->lbaf[i].rp == 3 ? "Degraded" : ns->lbaf[i].rp == 2 ? "Good" :
242+
ns->lbaf[i].rp == 1 ? "Better" : "Best");
243+
obj_add_str(lbaf, "in use", i == flbas ? "yes" : "no");
244+
} else {
245+
obj_add_int(lbaf, "lbaf", i);
246+
obj_add_int(lbaf, "ms", le16_to_cpu(ns->lbaf[i].ms));
247+
obj_add_int(lbaf, "ds", ns->lbaf[i].ds);
248+
obj_add_int(lbaf, "rp", ns->lbaf[i].rp);
249+
obj_add_int(lbaf, "in_use", i == flbas);
250+
}
251+
252+
array_add_obj(lbafs, lbaf);
253+
}
254+
227255
static void json_nvme_id_ns(struct nvme_id_ns *ns, unsigned int nsid,
228256
unsigned int lba_index, bool cap_only)
229257
{
@@ -306,15 +334,8 @@ static void json_nvme_id_ns(struct nvme_id_ns *ns, unsigned int nsid,
306334

307335
obj_add_array(r, "lbafs", lbafs);
308336

309-
for (i = 0; i <= ns->nlbaf; i++) {
310-
struct json_object *lbaf = json_create_object();
311-
312-
obj_add_int(lbaf, "ms", le16_to_cpu(ns->lbaf[i].ms));
313-
obj_add_int(lbaf, "ds", ns->lbaf[i].ds);
314-
obj_add_int(lbaf, "rp", ns->lbaf[i].rp);
315-
316-
array_add_obj(lbafs, lbaf);
317-
}
337+
for (i = 0; i <= ns->nlbaf; i++)
338+
json_nvme_id_ns_lbaf(ns, i, lbafs);
318339

319340
d_json(ns->vs, strnlen((const char *)ns->vs, sizeof(ns->vs)), 16, 1, vs);
320341
obj_add_array(r, "vs", vs);

0 commit comments

Comments
 (0)