summaryrefslogtreecommitdiff
path: root/hw/block/xen_blkif.h
diff options
context:
space:
mode:
authorOlaf Hering <olaf@aepfle.de>2014-05-07 13:40:04 +0000
committerStefano Stabellini <stefano.stabellini@eu.citrix.com>2014-05-07 16:18:04 +0000
commitf31352041bdde436c3f6d07e1525a42e48dec215 (patch)
tree6290479b8a2f3a5b9e360f4e1f9b09a53dd32d26 /hw/block/xen_blkif.h
parent8b6bb0ad17ab776239ba2bfc99ff107ada01c506 (diff)
downloadqemu-f31352041bdde436c3f6d07e1525a42e48dec215.tar.gz
qemu-f31352041bdde436c3f6d07e1525a42e48dec215.tar.bz2
qemu-f31352041bdde436c3f6d07e1525a42e48dec215.zip
xen_disk: add discard support
Implement discard support for xen_disk. It makes use of the existing discard code in qemu. The discard support is enabled unconditionally. The tool stack may provide a property "discard-enable" in the backend node to optionally disable discard support. This is helpful in case the backing file was intentionally created non-sparse to avoid fragmentation. Signed-off-by: Olaf Hering <olaf@aepfle.de> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Diffstat (limited to 'hw/block/xen_blkif.h')
-rw-r--r--hw/block/xen_blkif.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/hw/block/xen_blkif.h b/hw/block/xen_blkif.h
index c0f4136228..711b692742 100644
--- a/hw/block/xen_blkif.h
+++ b/hw/block/xen_blkif.h
@@ -79,6 +79,12 @@ static inline void blkif_get_x86_32_req(blkif_request_t *dst, blkif_x86_32_reque
dst->handle = src->handle;
dst->id = src->id;
dst->sector_number = src->sector_number;
+ if (src->operation == BLKIF_OP_DISCARD) {
+ struct blkif_request_discard *s = (void *)src;
+ struct blkif_request_discard *d = (void *)dst;
+ d->nr_sectors = s->nr_sectors;
+ return;
+ }
if (n > src->nr_segments)
n = src->nr_segments;
for (i = 0; i < n; i++)
@@ -94,6 +100,12 @@ static inline void blkif_get_x86_64_req(blkif_request_t *dst, blkif_x86_64_reque
dst->handle = src->handle;
dst->id = src->id;
dst->sector_number = src->sector_number;
+ if (src->operation == BLKIF_OP_DISCARD) {
+ struct blkif_request_discard *s = (void *)src;
+ struct blkif_request_discard *d = (void *)dst;
+ d->nr_sectors = s->nr_sectors;
+ return;
+ }
if (n > src->nr_segments)
n = src->nr_segments;
for (i = 0; i < n; i++)