]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme: Add wrapper for Format NVM
authorJeremy Kerr <jk@codeconstruct.com.au>
Tue, 19 Jul 2022 09:46:39 +0000 (17:46 +0800)
committerJeremy Kerr <jk@codeconstruct.com.au>
Wed, 17 Aug 2022 05:10:39 +0000 (13:10 +0800)
Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
nvme-wrap.c
nvme-wrap.h
nvme.c

index 4d241ac812e76b424d4206cbd5a391e4c44664e8..510da610766d1f27a119593db664243afc6ebccb 100644 (file)
@@ -123,6 +123,11 @@ int nvme_cli_ns_detach_ctrls(struct nvme_dev *dev, __u32 nsid,
        return do_admin_op(ns_detach_ctrls, dev, nsid, ctrlist);
 }
 
+int nvme_cli_format_nvm(struct nvme_dev *dev, struct nvme_format_nvm_args *args)
+{
+       return do_admin_args_op(format_nvm, dev, args);
+}
+
 /* The MI & direct interfaces don't have an exactly-matching API for
  * ns_mgmt_create, as we don't support a timeout for MI.
  */
index 51cb76d8b78b22be9310dedeee63b75815ebc61e..3b129fe3c4af04a6de947d6c61cf535724d87831 100644 (file)
@@ -36,6 +36,8 @@ int nvme_cli_ns_attach_ctrls(struct nvme_dev *dev, __u32 nsid,
 int nvme_cli_ns_detach_ctrls(struct nvme_dev *dev, __u32 nsid,
                             struct nvme_ctrl_list *ctrlist);
 
+int nvme_cli_format_nvm(struct nvme_dev *dev, struct nvme_format_nvm_args *args);
+
 int nvme_cli_get_features(struct nvme_dev *dev,
                          struct nvme_get_features_args *args);
 
diff --git a/nvme.c b/nvme.c
index 098ec449163d4798146b615330aa13f8270d932d..d9a9a6d1f6b608d25f370ed642ec41649c4732ea 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -4987,7 +4987,6 @@ static int format(int argc, char **argv, struct command *cmd, struct plugin *plu
 
        struct nvme_format_nvm_args args = {
                .args_size      = sizeof(args),
-               .fd             = dev_fd(dev),
                .nsid           = cfg.namespace_id,
                .lbafu          = (cfg.lbaf & NVME_NS_FLBAS_HIGHER_MASK) >> 4,
                .lbaf           = cfg.lbaf & NVME_NS_FLBAS_LOWER_MASK,
@@ -4998,14 +4997,14 @@ static int format(int argc, char **argv, struct command *cmd, struct plugin *plu
                .timeout        = cfg.timeout,
                .result         = NULL,
        };
-       err = nvme_format_nvm(&args);
+       err = nvme_cli_format_nvm(dev, &args);
        if (err < 0)
                fprintf(stderr, "format: %s\n", nvme_strerror(errno));
        else if (err != 0)
                nvme_show_status(err);
        else {
                printf("Success formatting namespace:%x\n", cfg.namespace_id);
-               if (cfg.lbaf != prev_lbaf){
+               if (dev->type == NVME_DEV_DIRECT && cfg.lbaf != prev_lbaf){
                        if (is_chardev(dev)) {
                                if (ioctl(dev_fd(dev), NVME_IOCTL_RESCAN) < 0) {
                                        fprintf(stderr, "failed to rescan namespaces\n");
@@ -5036,7 +5035,7 @@ static int format(int argc, char **argv, struct command *cmd, struct plugin *plu
                                }
                        }
                }
-               if (cfg.reset && is_chardev(dev))
+               if (dev->type == NVME_DEV_DIRECT && cfg.reset && is_chardev(dev))
                        nvme_ctrl_reset(dev_fd(dev));
        }