[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for xen-4.4] libxl: add option for discard support to xl disk configuration
And just for reference, this is a version for our 4.4: .... This change does not break ABI. Instead of adding a new member ->discard_enable to struct libxl_device_disk the existing ->readwrite member is reused. Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> --- docs/misc/xl-disk-configuration.txt | 15 +++++++++++++++ tools/libxl/libxl.c | 2 ++ tools/libxl/libxl.h | 11 +++++++++++ tools/libxl/libxlu_disk.c | 3 +++ tools/libxl/libxlu_disk_i.h | 2 +- tools/libxl/libxlu_disk_l.l | 4 ++++ 6 files changed, 36 insertions(+), 1 deletion(-) diff --git a/docs/misc/xl-disk-configuration.txt b/docs/misc/xl-disk-configuration.txt index 5bd456d..c9fd9bd 100644 --- a/docs/misc/xl-disk-configuration.txt +++ b/docs/misc/xl-disk-configuration.txt @@ -178,6 +178,21 @@ information to be interpreted by the executable program <script>, These scripts are normally called "block-<script>". +discard=<boolean> +--------------- + +Description: Instruct backend to advertise discard support to frontend +Supported values: on, off, 0, 1 +Mandatory: No +Default value: on if, available for that backend typ + +This option is an advisory setting for the backend driver, depending of the +value, 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 allows +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 diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 2845ca4..9ed5062 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -2196,6 +2196,8 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, flexarray_append(back, disk->readwrite ? "w" : "r"); flexarray_append(back, "device-type"); flexarray_append(back, disk->is_cdrom ? "cdrom" : "disk"); + if (disk->readwrite == LIBXL_HAVE_LIBXL_DEVICE_DISK_DISCARD_DISABLE_MAGIC) + flexarray_append_pair(back, "discard-enable", "0"); flexarray_append(front, "backend-id"); flexarray_append(front, libxl__sprintf(gc, "%d", disk->backend_domid)); diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 12d6c31..021f7e4 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -95,6 +95,17 @@ #define LIBXL_HAVE_BUILDINFO_EVENT_CHANNELS 1 /* + * The libxl_device_disk lacks discard_enable field, disabling discard + * is supported without breaking the ABI. This is done by overloading + * struct libxl_device_disk->readwrite: + * readwrite == 0: disk is readonly, no discard + * readwrite == 1: disk is readwrite, backend driver may enable discard + * readwrite == MAGIC: disk is readwrite, backend driver should not offer + * discard to the frontend driver. + */ +#define LIBXL_HAVE_LIBXL_DEVICE_DISK_DISCARD_DISABLE_MAGIC 0xdcadU + +/* * libxl ABI compatibility * * The only guarantee which libxl makes regarding ABI compatibility diff --git a/tools/libxl/libxlu_disk.c b/tools/libxl/libxlu_disk.c index 18fe386..e596cb6 100644 --- a/tools/libxl/libxlu_disk.c +++ b/tools/libxl/libxlu_disk.c @@ -80,6 +80,9 @@ int xlu_disk_parse(XLU_Config *cfg, disk->format = LIBXL_DISK_FORMAT_EMPTY; } + if (disk->readwrite && dpc.disable_discard) + disk->readwrite = LIBXL_HAVE_LIBXL_DEVICE_DISK_DISCARD_DISABLE_MAGIC; + if (!disk->vdev) { xlu__disk_err(&dpc,0, "no vdev specified"); goto x_err; diff --git a/tools/libxl/libxlu_disk_i.h b/tools/libxl/libxlu_disk_i.h index 4fccd4a..9db3002 100644 --- a/tools/libxl/libxlu_disk_i.h +++ b/tools/libxl/libxlu_disk_i.h @@ -10,7 +10,7 @@ typedef struct { void *scanner; YY_BUFFER_STATE buf; libxl_device_disk *disk; - int access_set, had_depr_prefix; + int access_set, disable_discard, had_depr_prefix; const char *spec; } DiskParseContext; diff --git a/tools/libxl/libxlu_disk_l.l b/tools/libxl/libxlu_disk_l.l index 7c4e7f1..ecc30ae 100644 --- a/tools/libxl/libxlu_disk_l.l +++ b/tools/libxl/libxlu_disk_l.l @@ -173,6 +173,10 @@ backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); } vdev=[^,]*,? { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); } script=[^,]*,? { STRIP(','); SAVESTRING("script", script, FROMEQUALS); } +discard=on,? { DPC->disable_discard = 0; } +discard=1,? { DPC->disable_discard = 0; } +discard=off,? { DPC->disable_discard = 1; } +discard=0,? { DPC->disable_discard = 1; } /* the target magic parameter, eats the rest of the string */ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |