]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
Add 'DEAC' support to write-zeroes command
authorKeith Busch <keith.busch@intel.com>
Mon, 27 Nov 2017 15:55:58 +0000 (08:55 -0700)
committerKeith Busch <keith.busch@intel.com>
Mon, 27 Nov 2017 15:55:58 +0000 (08:55 -0700)
https://github.com/linux-nvme/nvme-cli/issues/234

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

index 44b8bd02373311d54154926bb5382953f9fb71de..2d5be8f7b1ae46ca5cec7b4712211820b9b4b59e 100644 (file)
@@ -577,6 +577,7 @@ struct nvme_rw_command {
 enum {
        NVME_RW_LR                      = 1 << 15,
        NVME_RW_FUA                     = 1 << 14,
+       NVME_RW_DEAC                    = 1 << 9,
        NVME_RW_DSM_FREQ_UNSPEC         = 0,
        NVME_RW_DSM_FREQ_TYPICAL        = 1,
        NVME_RW_DSM_FREQ_RARE           = 2,
diff --git a/nvme.c b/nvme.c
index 5c298dd7dd25b75656750b0eb9dae53c866742d5..6dae69f1e41fc55b5e18698a02d674951f391388 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -2187,6 +2187,7 @@ static int write_zeroes(int argc, char **argv, struct command *cmd, struct plugi
        const char *ref_tag = "reference tag (for end to end PI)";
        const char *app_tag_mask = "app tag mask (for end to end PI)";
        const char *app_tag = "app tag (for end to end PI)";
+       const char *deac = "Set DEAC bit, requesting controller to deallocate specified logical blocks";
 
        struct config {
                __u64 start_block;
@@ -2196,6 +2197,7 @@ static int write_zeroes(int argc, char **argv, struct command *cmd, struct plugi
                __u16 app_tag_mask;
                __u16 block_count;
                __u8  prinfo;
+               int   deac;
                int   limited_retry;
                int   force_unit_access;
        };
@@ -2213,6 +2215,7 @@ static int write_zeroes(int argc, char **argv, struct command *cmd, struct plugi
                {"namespace-id",      'n', "NUM", CFG_POSITIVE,    &cfg.namespace_id,      required_argument, namespace_id},
                {"start-block",       's', "NUM", CFG_LONG_SUFFIX, &cfg.start_block,       required_argument, start_block},
                {"block-count",       'c', "NUM", CFG_SHORT,       &cfg.block_count,       required_argument, block_count},
+               {"deac",              'd', "",    CFG_NONE,        &cfg.deac,              no_argument,       deac},
                {"limited-retry",     'l', "",    CFG_NONE,        &cfg.limited_retry,     no_argument,       limited_retry},
                {"force-unit-access", 'f', "",    CFG_NONE,        &cfg.force_unit_access, no_argument,       force},
                {"prinfo",            'p', "NUM", CFG_BYTE,        &cfg.prinfo,            required_argument, prinfo},
@@ -2234,6 +2237,8 @@ static int write_zeroes(int argc, char **argv, struct command *cmd, struct plugi
                control |= NVME_RW_LR;
        if (cfg.force_unit_access)
                control |= NVME_RW_FUA;
+       if (cfg.deac)
+               control |= NVME_RW_DEAC;
        if (!cfg.namespace_id)
                cfg.namespace_id = get_nsid(fd);