aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/xen-blkback/common.h
diff options
context:
space:
mode:
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2011-10-12 16:23:30 -0400
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2011-11-18 13:28:01 -0500
commit5ea42986694a96542644f9cae8b122d3a00c508f (patch)
treedd74685d8cd41e39ad14e708cb6e00e0ed016fb1 /drivers/block/xen-blkback/common.h
parent97e36834f5a106459ab1b290e663a4eb6264639e (diff)
xen/blk[front|back]: Enhance discard support with secure erasing support.
Part of the blkdev_issue_discard(xx) operation is that it can also issue a secure discard operation that will permanantly remove the sectors in question. We advertise that we can support that via the 'discard-secure' attribute and on the request, if the 'secure' bit is set, we will attempt to pass in REQ_DISCARD | REQ_SECURE. CC: Li Dongyang <lidongyang@novell.com> [v1: Used 'flag' instead of 'secure:1' bit] [v2: Use 'reserved' uint8_t instead of adding a new value] [v3: Check for nseg when mapping instead of operation] Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'drivers/block/xen-blkback/common.h')
-rw-r--r--drivers/block/xen-blkback/common.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
index dbfe7b3b0737..d0ee7edc9be8 100644
--- a/drivers/block/xen-blkback/common.h
+++ b/drivers/block/xen-blkback/common.h
@@ -69,7 +69,7 @@ struct blkif_x86_32_request_rw {
69} __attribute__((__packed__)); 69} __attribute__((__packed__));
70 70
71struct blkif_x86_32_request_discard { 71struct blkif_x86_32_request_discard {
72 uint8_t nr_segments; /* number of segments */ 72 uint8_t flag; /* BLKIF_DISCARD_SECURE or zero */
73 blkif_vdev_t _pad1; /* was "handle" for read/write requests */ 73 blkif_vdev_t _pad1; /* was "handle" for read/write requests */
74 uint64_t id; /* private guest value, echoed in resp */ 74 uint64_t id; /* private guest value, echoed in resp */
75 blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ 75 blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */
@@ -104,7 +104,7 @@ struct blkif_x86_64_request_rw {
104} __attribute__((__packed__)); 104} __attribute__((__packed__));
105 105
106struct blkif_x86_64_request_discard { 106struct blkif_x86_64_request_discard {
107 uint8_t nr_segments; /* number of segments */ 107 uint8_t flag; /* BLKIF_DISCARD_SECURE or zero */
108 blkif_vdev_t _pad1; /* was "handle" for read/write requests */ 108 blkif_vdev_t _pad1; /* was "handle" for read/write requests */
109 uint32_t _pad2; /* offsetof(blkif_..,u.discard.id)==8 */ 109 uint32_t _pad2; /* offsetof(blkif_..,u.discard.id)==8 */
110 uint64_t id; 110 uint64_t id;
@@ -164,6 +164,7 @@ struct xen_vbd {
164 /* Cached size parameter. */ 164 /* Cached size parameter. */
165 sector_t size; 165 sector_t size;
166 bool flush_support; 166 bool flush_support;
167 bool discard_secure;
167}; 168};
168 169
169struct backend_info; 170struct backend_info;
@@ -261,6 +262,7 @@ static inline void blkif_get_x86_32_req(struct blkif_request *dst,
261 dst->u.rw.seg[i] = src->u.rw.seg[i]; 262 dst->u.rw.seg[i] = src->u.rw.seg[i];
262 break; 263 break;
263 case BLKIF_OP_DISCARD: 264 case BLKIF_OP_DISCARD:
265 dst->u.discard.flag = src->u.discard.flag;
264 dst->u.discard.sector_number = src->u.discard.sector_number; 266 dst->u.discard.sector_number = src->u.discard.sector_number;
265 dst->u.discard.nr_sectors = src->u.discard.nr_sectors; 267 dst->u.discard.nr_sectors = src->u.discard.nr_sectors;
266 break; 268 break;
@@ -290,6 +292,7 @@ static inline void blkif_get_x86_64_req(struct blkif_request *dst,
290 dst->u.rw.seg[i] = src->u.rw.seg[i]; 292 dst->u.rw.seg[i] = src->u.rw.seg[i];
291 break; 293 break;
292 case BLKIF_OP_DISCARD: 294 case BLKIF_OP_DISCARD:
295 dst->u.discard.flag = src->u.discard.flag;
293 dst->u.discard.sector_number = src->u.discard.sector_number; 296 dst->u.discard.sector_number = src->u.discard.sector_number;
294 dst->u.discard.nr_sectors = src->u.discard.nr_sectors; 297 dst->u.discard.nr_sectors = src->u.discard.nr_sectors;
295 break; 298 break;