libxl: add option for discard support to xl disk configuration

Handle new boolean option discard/no-discard for disk configuration. It
is supposed to disable discard support if file based backing storage was
intentionally created non-sparse to avoid fragmentation of the file.

The option intended for the backend driver. A new boolean property
"discard-enable" is written to the backend node. An upcoming patch for
qemu will make use of this property. The kernel blkback driver may be
updated as well to disable discard for phy based backing storage.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
Olaf Hering authored and Ian Jackson committed 2014-05-19 12:50:27 +01:00
1 parent 86216963fd
commit 417e6b70d7
8 files changed
+112 -7

No files matched your search

+17
View File
@@ -217,6 +217,23 @@ If in the future the bug is fixed properly this option will then be
silently ignored.
discard / no-discard
---------------
Description: Request that backend advertise discard support to frontend
Supported values: discard
no-discard
Mandatory: No
Default value: discard
An advisory setting for the backend driver, specifying whether to
advertise discard support (TRIM, UNMAP) to the frontend. The real
benefit of this option is to be able to force it off rather than on. It
can be used to disable "hole punching" for file based backends which
were intentionally created non-sparse to avoid fragmentation of the
file.
============================================
DEPRECATED PARAMETERS, PREFIXES AND SYNTAXES
============================================
+73 -7
View File
@@ -62,7 +62,8 @@ disk: {
"removable": 0,
"readwrite": 1,
"is_cdrom": 0,
"direct_io_safe": false
"direct_io_safe": false,
"discard_enable": "True"
}
END
@@ -84,7 +85,8 @@ disk: {
"removable": 1,
"readwrite": 0,
"is_cdrom": 1,
"direct_io_safe": false
"direct_io_safe": false,
"discard_enable": "False"
}
END
@@ -107,7 +109,8 @@ disk: {
"removable": 0,
"readwrite": 1,
"is_cdrom": 0,
"direct_io_safe": false
"direct_io_safe": false,
"discard_enable": "True"
}
EOF
@@ -125,7 +128,8 @@ disk: {
"removable": 1,
"readwrite": 0,
"is_cdrom": 1,
"direct_io_safe": false
"direct_io_safe": false,
"discard_enable": "False"
}
EOF
@@ -147,7 +151,8 @@ disk: {
"removable": 1,
"readwrite": 0,
"is_cdrom": 1,
"direct_io_safe": false
"direct_io_safe": false,
"discard_enable": "False"
}
EOF
@@ -166,7 +171,8 @@ disk: {
"removable": 0,
"readwrite": 1,
"is_cdrom": 0,
"direct_io_safe": false
"direct_io_safe": false,
"discard_enable": "True"
}
EOF
@@ -187,7 +193,8 @@ disk: {
"removable": 0,
"readwrite": 1,
"is_cdrom": 0,
"direct_io_safe": false
"direct_io_safe": false,
"discard_enable": "True"
}
EOF
@@ -196,4 +203,63 @@ EOF
# http://www.drbd.org/users-guide-emb/s-xen-configure-domu.html
one 0 drbd:app01,hda,w
expected <<END
disk: {
"backend_domid": 0,
"backend_domname": null,
"pdev_path": "/some/disk/image.raw",
"vdev": "hda",
"backend": "unknown",
"format": "raw",
"script": null,
"removable": 0,
"readwrite": 1,
"is_cdrom": 0,
"direct_io_safe": false,
"discard_enable": "True"
}
END
one 0 discard=on vdev=hda target=/some/disk/image.raw
one 0 discard=1 vdev=hda target=/some/disk/image.raw
expected <<END
disk: {
"backend_domid": 0,
"backend_domname": null,
"pdev_path": "/some/disk/image.raw",
"vdev": "hda",
"backend": "unknown",
"format": "raw",
"script": null,
"removable": 0,
"readwrite": 1,
"is_cdrom": 0,
"direct_io_safe": false,
"discard_enable": "False"
}
END
one 0 discard vdev=hda target=/some/disk/image.raw
one 0 discard vdev=hda target=/some/disk/image.raw
expected <<END
disk: {
"backend_domid": 0,
"backend_domname": null,
"pdev_path": "/some/disk/image.iso",
"vdev": "hda",
"backend": "unknown",
"format": "raw",
"script": null,
"removable": 1,
"readwrite": 0,
"is_cdrom": 1,
"direct_io_safe": false,
"discard_enable": "False"
}
END
one 0 cdrom no-discard vdev=hda target=/some/disk/image.iso
complete
+3
View File
@@ -2209,6 +2209,9 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid,
flexarray_append(back, "direct-io-safe");
flexarray_append(back, "1");
}
flexarray_append_pair(back, "discard-enable",
libxl_defbool_val(disk->discard_enable) ?
"1" : "0");
flexarray_append(front, "backend-id");
flexarray_append(front, libxl__sprintf(gc, "%d", disk->backend_domid));
+5
View File
@@ -101,6 +101,11 @@
*/
#define LIBXL_HAVE_DEVICE_DISK_DIRECT_IO_SAFE 1
/*
* The libxl_device_disk has the discard_enable field.
*/
#define LIBXL_HAVE_LIBXL_DEVICE_DISK_DISCARD_ENABLE 1
/*
* libxl ABI compatibility
*
+1
View File
@@ -417,6 +417,7 @@ libxl_device_disk = Struct("device_disk", [
("readwrite", integer),
("is_cdrom", integer),
("direct_io_safe", bool),
("discard_enable", libxl_defbool),
])
libxl_device_nic = Struct("device_nic", [
+1
View File
@@ -79,6 +79,7 @@ int xlu_disk_parse(XLU_Config *cfg,
if (!disk->pdev_path || !strcmp(disk->pdev_path, ""))
disk->format = LIBXL_DISK_FORMAT_EMPTY;
}
libxl_defbool_setdefault(&disk->discard_enable, !!disk->readwrite);
if (!disk->vdev) {
xlu__disk_err(&dpc,0, "no vdev specified");
+2
View File
@@ -174,6 +174,8 @@ backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
vdev=[^,]*,? { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
script=[^,]*,? { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
direct-io-safe,? { DPC->disk->direct_io_safe = 1; }
discard,? { libxl_defbool_set(&DPC->disk->discard_enable, true); }
no-discard,? { libxl_defbool_set(&DPC->disk->discard_enable, false); }
/* the target magic parameter, eats the rest of the string */
+10
View File
@@ -197,6 +197,16 @@
*
*------------------------- Backend Device Properties -------------------------
*
* discard-enable
* Values: 0/1 (boolean)
* Default Value: 1
*
* This optional property, set by the toolstack, instructs the backend
* to offer discard to the frontend. If the property is missing the
* backend should offer discard if the backing storage actually supports
* it. This optional property, set by the toolstack, requests that the
* backend offer, or not offer, discard to the frontend.
*
* discard-alignment
* Values: <uint32_t>
* Default Value: 0
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.