]> www.infradead.org Git - users/hch/nvme-cli.git/commitdiff
Namespace attach controller list endian fix
authorKeith Busch <keith.busch@intel.com>
Fri, 18 Mar 2016 16:59:56 +0000 (10:59 -0600)
committerKeith Busch <keith.busch@intel.com>
Tue, 29 Mar 2016 18:25:48 +0000 (12:25 -0600)
Convert for host endian.

Signed-off-by: Keith Busch <keith.busch@intel.com>
nvme.c

diff --git a/nvme.c b/nvme.c
index b50f170dc738cd96b04cbd7d360aa9dfc1ca7983..1230d627e730668838b3578ca401a6e175c896c9 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -246,6 +246,7 @@ static int get_additional_smart_log(int argc, char **argv)
        };
 
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        err = nvme_intel_smart_log(fd, cfg.namespace_id, &smart_log);
        if (!err) {
                if (!cfg.raw_binary)
@@ -288,8 +289,8 @@ static int get_error_log(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        if (!cfg.log_entries) {
                fprintf(stderr, "non-zero log-entries is required param\n");
                return EINVAL;
@@ -337,7 +338,6 @@ static int get_fw_log(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        err = nvme_fw_log(fd, &fw_log);
@@ -387,7 +387,6 @@ static int get_log(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        if (!cfg.log_len) {
@@ -436,7 +435,6 @@ static int list_ctrl(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        if (posix_memalign((void *)&cntlist, getpagesize(), 0x1000))
@@ -479,7 +477,6 @@ static int list_ns(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        err = nvme_identify_ns_list(fd, cfg.namespace_id, !!cfg.all, ns_list);
@@ -518,8 +515,8 @@ static int delete_ns(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        if (!cfg.namespace_id) {
                fprintf(stderr, "%s: namespace-id parameter required\n",
                                                commands[DELETE_NS].name);
@@ -542,7 +539,7 @@ static int nvme_attach_ns(int argc, char **argv, int attach, const char *desc)
 {
        char *name = commands[attach ? ATTACH_NS : DETACH_NS].name;
        int err, num, i, list[2048];
-       __u16 ctrlist[2048];
+       __le16 ctrlist[2048];
 
        const char *namespace_id = "namespace to attach";
        const char *cont = "optional comma-sep controllers list";
@@ -562,18 +559,18 @@ static int nvme_attach_ns(int argc, char **argv, int attach, const char *desc)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        if (!cfg.namespace_id) {
                fprintf(stderr, "%s: namespace-id parameter required\n",
                                                name);
                return EINVAL;
        }
+
        num = argconfig_parse_comma_sep_array(cfg.cntlist,
                                        list, 2047);
        for (i = 0; i < num; i++)
-               ctrlist[i] = ((uint16_t)list[i]);
-
+               ctrlist[i] = htole16(((uint16_t)list[i]));
 
        if (attach)     
                err = nvme_ns_attach_ctrls(fd, cfg.namespace_id, num, ctrlist);
@@ -645,7 +642,6 @@ static int create_ns(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        err = nvme_ns_create(fd, cfg.nsze, cfg.ncap, cfg.flbas, cfg.dps, cfg.nmic, &nsid);
@@ -860,8 +856,8 @@ static int id_ctrl(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        if (cfg.vendor_specific)
                flags |= VS;
        if (cfg.human_readable)
@@ -917,8 +913,8 @@ static int id_ns(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        if (cfg.vendor_specific)
                flags |= VS;
        if (cfg.human_readable)
@@ -1012,7 +1008,6 @@ static int get_feature(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        if (cfg.sel > 7) {
@@ -1104,7 +1099,6 @@ static int fw_download(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        fw_fd = open(cfg.fw, O_RDONLY);
@@ -1181,7 +1175,6 @@ static int fw_activate(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        if (cfg.slot > 7) {
@@ -1310,8 +1303,8 @@ static int format(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        /* ses & pi checks set to 7 for forward-compatibility */
        if (cfg.ses > 7) {
                fprintf(stderr, "invalid secure erase settings:%d\n", cfg.ses);
@@ -1497,8 +1490,8 @@ static int sec_send(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        sec_fd = open(cfg.file, O_RDONLY);
        if (sec_fd < 0) {
                fprintf(stderr, "no firmware file provided\n");
@@ -1556,8 +1549,8 @@ static int write_uncor(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        if (!cfg.namespace_id) {
                cfg.namespace_id = nvme_get_nsid(fd);
                if (cfg.namespace_id <= 0) {
@@ -1629,7 +1622,6 @@ static int write_zeroes(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        if (cfg.prinfo > 0xf)
@@ -1718,8 +1710,8 @@ static int dsm(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        nc = argconfig_parse_comma_sep_array(cfg.ctx_attrs, ctx_attrs, array_len(ctx_attrs));
        nb = argconfig_parse_comma_sep_array(cfg.blocks, nlbs, array_len(nlbs));
        ns = argconfig_parse_comma_sep_array_long(cfg.slbas, slbas, array_len(slbas));
@@ -1779,7 +1771,6 @@ static int flush(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        err = nvme_flush(fd, cfg.namespace_id);
@@ -1836,7 +1827,6 @@ static int resv_acquire(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        if (!cfg.namespace_id) {
@@ -1904,7 +1894,6 @@ static int resv_register(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        if (!cfg.namespace_id) {
@@ -1974,7 +1963,6 @@ static int resv_release(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        if (!cfg.namespace_id) {
@@ -2038,7 +2026,6 @@ static int resv_report(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        if (!cfg.namespace_id) {
@@ -2150,9 +2137,9 @@ static int submit_io(int opcode, char *command, const char *desc,
                {0}
        };
 
-       dfd = mfd = opcode & 1 ? STDIN_FILENO : STDOUT_FILENO;
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
+       dfd = mfd = opcode & 1 ? STDIN_FILENO : STDOUT_FILENO;
        if (cfg.prinfo > 0xf)
                return EINVAL;
        control |= (cfg.prinfo << 10);
@@ -2324,7 +2311,6 @@ static int sec_recv(int argc, char **argv)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
 
        if (cfg.size) {
@@ -2449,8 +2435,8 @@ static int passthru(int argc, char **argv, int ioctl_cmd, const char *desc)
                {0}
        };
 
-
        parse_and_open(argc, argv, desc, command_line_options, &cfg, sizeof(cfg));
+
        if (strlen(cfg.input_file)){
                wfd = open(cfg.input_file, O_RDONLY,
                           S_IRUSR | S_IRGRP | S_IROTH);