diff options
author | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2011-10-12 16:23:30 -0400 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2011-11-18 13:28:01 -0500 |
commit | 5ea42986694a96542644f9cae8b122d3a00c508f (patch) | |
tree | dd74685d8cd41e39ad14e708cb6e00e0ed016fb1 /drivers/block/xen-blkback/common.h | |
parent | 97e36834f5a106459ab1b290e663a4eb6264639e (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.h | 7 |
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 | ||
71 | struct blkif_x86_32_request_discard { | 71 | struct 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 | ||
106 | struct blkif_x86_64_request_discard { | 106 | struct 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 | ||
169 | struct backend_info; | 170 | struct 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; |