diff options
author | Olaf Hering <olaf@aepfle.de> | 2014-05-07 13:40:04 +0000 |
---|---|---|
committer | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2014-05-07 16:18:04 +0000 |
commit | f31352041bdde436c3f6d07e1525a42e48dec215 (patch) | |
tree | 6290479b8a2f3a5b9e360f4e1f9b09a53dd32d26 /hw/block/xen_blkif.h | |
parent | 8b6bb0ad17ab776239ba2bfc99ff107ada01c506 (diff) | |
download | qemu-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.h | 12 |
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++) |