summaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2012-11-09 16:33:05 -0700
committerMatthew Wilcox <matthew.r.wilcox@intel.com>2013-03-26 14:18:58 -0400
commit0e5e4f0e56aca0df1d5648db0be9028bd573b25c (patch)
treea83ab74e90bae5e0a20e6fd9dd03924cac1f3db9 /include/linux
parenta12183c62717ac4579319189a00f5883a18dff08 (diff)
downloadlinux-stable-0e5e4f0e56aca0df1d5648db0be9028bd573b25c.tar.gz
linux-stable-0e5e4f0e56aca0df1d5648db0be9028bd573b25c.tar.bz2
linux-stable-0e5e4f0e56aca0df1d5648db0be9028bd573b25c.zip
NVMe: Add discard support for capable devices
This adds discard support to block queues if the nvme device is capable of deallocating blocks as indicated by the controller's optional command support. A discard flagged bio request will submit an NVMe deallocate Data Set Management command for the requested blocks. Signed-off-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/nvme.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/include/linux/nvme.h b/include/linux/nvme.h
index 4fa3b0b9b071..bde44c1fd213 100644
--- a/include/linux/nvme.h
+++ b/include/linux/nvme.h
@@ -107,6 +107,12 @@ struct nvme_id_ctrl {
__u8 vs[1024];
};
+enum {
+ NVME_CTRL_ONCS_COMPARE = 1 << 0,
+ NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 1 << 1,
+ NVME_CTRL_ONCS_DSM = 1 << 2,
+};
+
struct nvme_lbaf {
__le16 ms;
__u8 ds;
@@ -246,6 +252,31 @@ enum {
NVME_RW_DSM_COMPRESSED = 1 << 7,
};
+struct nvme_dsm_cmd {
+ __u8 opcode;
+ __u8 flags;
+ __u16 command_id;
+ __le32 nsid;
+ __u64 rsvd2[2];
+ __le64 prp1;
+ __le64 prp2;
+ __le32 nr;
+ __le32 attributes;
+ __u32 rsvd12[4];
+};
+
+enum {
+ NVME_DSMGMT_IDR = 1 << 0,
+ NVME_DSMGMT_IDW = 1 << 1,
+ NVME_DSMGMT_AD = 1 << 2,
+};
+
+struct nvme_dsm_range {
+ __le32 cattr;
+ __le32 nlb;
+ __le64 slba;
+};
+
/* Admin commands */
enum nvme_admin_opcode {
@@ -372,6 +403,7 @@ struct nvme_command {
struct nvme_create_sq create_sq;
struct nvme_delete_queue delete_queue;
struct nvme_download_firmware dlfw;
+ struct nvme_dsm_cmd dsm;
};
};