|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] [PATCH 2/2 v2] Add trim operation to xen block devices
Add Trim command interface
This patch adds the trim operation to the blkback ring protocol.
Trim commands are passed with sector_number as the sector index to
begin trim operations at and nr_sectors as the number of sectors to
be trimmed. The specified sectors should be trimmed if the underlying
block device supports trim operations, or a BLKIF_RSP_EOPNOTSUPP should
be returned. More information about trim operations:
http://t13.org/Documents/UploadedDocuments/docs2008/
e07154r6-Data_Set_Management_Proposal_for_ATA-ACS2.doc
Signed-of-by: Owen Smith <owen.smith@xxxxxxxxxx>
# HG changeset patch
# User Owen Smith <owen.smith@xxxxxxxxxx>
# Date 1292938216 0
# Node ID 6be1a23977b82e44eba80feeca3fb77acf6bb2bb
# Parent 7015d7407eae8694ce1cc92e792b2087f109f6cb
imported patch add-trim
diff -r 7015d7407eae -r 6be1a23977b8 xen/include/public/io/blkif.h
--- a/xen/include/public/io/blkif.h Tue Dec 21 13:28:48 2010 +0000
+++ b/xen/include/public/io/blkif.h Tue Dec 21 13:30:16 2010 +0000
@@ -76,6 +76,17 @@
* "feature-flush-cache" node!
*/
#define BLKIF_OP_FLUSH_DISKCACHE 3
+/*
+ * Recognised only if "feature-trim" is present in backend xenbus info.
+ * The "feature-trim" node contains a boolean indicating whether trim
+ * requests are likely to succeed or fail. Either way, a trim request
+ * may fail at any time with BLKIF_RSP_EOPNOTSUPP if it is unsupported by
+ * the underlying block-device hardware. The boolean simply indicates whether
+ * or not it is worthwhile for the frontend to attempt trim requests.
+ * If a backend does not recognise BLKIF_OP_TRIM, it should *not*
+ * create the "feature-trim" node!
+ */
+#define BLKIF_OP_TRIM 5
/*
* Maximum scatter/gather segments per request.
@@ -103,6 +114,11 @@
struct blkif_request_segment seg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
};
+struct blkif_request_trim {
+ blkif_sector_t sector_number;/* start sector idx on disk */
+ uint64_t nr_sectors;
+};
+
struct blkif_request {
uint8_t operation; /* BLKIF_OP_??? */
uint8_t nr_segments; /* number of segments */
@@ -110,6 +126,7 @@
uint64_t id; /* private guest value, echoed in resp */
union {
struct blkif_request_rw rw;
+ struct blkif_request_trim trim;
} u;
};
typedef struct blkif_request blkif_request_t;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|