|
14 | 14 | #include "util/logging.h" |
15 | 15 | #include "nvme.h" |
16 | 16 | #include "common.h" |
| 17 | +#include "libnvme.h" |
17 | 18 |
|
18 | 19 | #define ERROR_MSG_LEN 100 |
19 | 20 | #define NAME_LEN 128 |
|
40 | 41 | #define obj_add_nprix64 json_object_add_nprix64 |
41 | 42 | #define obj_add_uint_0nx json_object_add_uint_0nx |
42 | 43 | #define obj_add_0nprix64 json_object_add_0nprix64 |
| 44 | +#define obj_add_string json_object_add_string |
43 | 45 |
|
44 | 46 | static const uint8_t zero_uuid[16] = { 0 }; |
45 | 47 | static struct print_ops json_print_ops; |
@@ -224,6 +226,32 @@ static void json_id_iocs(struct nvme_id_iocs *iocs) |
224 | 226 | json_print(r); |
225 | 227 | } |
226 | 228 |
|
| 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 | + |
227 | 255 | static void json_nvme_id_ns(struct nvme_id_ns *ns, unsigned int nsid, |
228 | 256 | unsigned int lba_index, bool cap_only) |
229 | 257 | { |
@@ -306,15 +334,8 @@ static void json_nvme_id_ns(struct nvme_id_ns *ns, unsigned int nsid, |
306 | 334 |
|
307 | 335 | obj_add_array(r, "lbafs", lbafs); |
308 | 336 |
|
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); |
318 | 339 |
|
319 | 340 | d_json(ns->vs, strnlen((const char *)ns->vs, sizeof(ns->vs)), 16, 1, vs); |
320 | 341 | obj_add_array(r, "vs", vs); |
|
0 commit comments