|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH resend] libxl, hotplug/Linux: default to phy backend for raw format file, take 2
oops, I was literally reviewing the previous send as you sent this...
On Thu, 2015-01-08 at 13:46 +0000, Wei Liu wrote:
> This patch resurrects 11a63a166. The previous patch had a bug that
> wrong "physical-device" was written to xenstore causing block script
> execution fail. This patch fixes that problem.
>
> Following configurations have been tested:
>
> 1. Raw file and PV
> 2. Raw file and HVM
> 3. Block device and PV
> 4. Block device and HVM
>
> Creation / destruction / local migration all worked.
>
> Original commit message from 11a63a166:
>
> Modify libxl and hotplug script to allow raw format file to use phy
> backend.
>
> The block script now tests the path and determine the actual type of
> file (block device or regular file) then use the actual type to
> determine which branch to run.
>
> With these changes, plus the current ordering of backend preference (phy
> > qdisk > tap), we will use phy backend for raw format file by default.
>
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> Cc: Roger Pau Monnà <roger.pau@xxxxxxxxxx>
> Acked-by: Roger Pau Monnà <roger.pau@xxxxxxxxxx>
> ---
> tools/hotplug/Linux/block | 16 +++++++++-------
> tools/libxl/libxl.c | 6 +++---
> tools/libxl/libxl_device.c | 2 ++
> tools/libxl/libxl_linux.c | 6 +++---
> 4 files changed, 17 insertions(+), 13 deletions(-)
>
> diff --git a/tools/hotplug/Linux/block b/tools/hotplug/Linux/block
> index da26e22..8d2ee9d 100644
> --- a/tools/hotplug/Linux/block
> +++ b/tools/hotplug/Linux/block
> @@ -206,6 +206,13 @@ and so cannot be mounted ${m2}${when}."
>
>
> t=$(xenstore_read_default "$XENBUS_PATH/type" 'MISSING')
> +p=$(xenstore_read "$XENBUS_PATH/params")
> +mode=$(xenstore_read "$XENBUS_PATH/mode")
> +if [ -b "$p" ]; then
> + truetype="phy"
> +elif [ -f "$p" ]; then
> + truetype="file"
> +fi
>
> case "$command" in
> add)
> @@ -217,16 +224,11 @@ case "$command" in
> exit 0
> fi
>
> - if [ -n "$t" ]
> - then
> - p=$(xenstore_read "$XENBUS_PATH/params")
> - mode=$(xenstore_read "$XENBUS_PATH/mode")
> - fi
> FRONTEND_ID=$(xenstore_read "$XENBUS_PATH/frontend-id")
> FRONTEND_UUID=$(xenstore_read_default \
> "/local/domain/$FRONTEND_ID/vm" 'unknown')
>
> - case $t in
> + case $truetype in
> phy)
> dev=$(expand_dev $p)
>
> @@ -319,7 +321,7 @@ mount it read-write in a guest domain."
> ;;
>
> remove)
> - case $t in
> + case $truetype in
> phy)
> exit 0
> ;;
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> index 50a8928..fae9fac 100644
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -2413,9 +2413,9 @@ static void device_disk_add(libxl__egc *egc, uint32_t
> domid,
> if (!disk->script &&
> disk->backend_domid == LIBXL_TOOLSTACK_DOMID) {
> int major, minor;
> - libxl__device_physdisk_major_minor(dev, &major, &minor);
> - flexarray_append_pair(back, "physical-device",
> - libxl__sprintf(gc, "%x:%x", major, minor));
> + if (!libxl__device_physdisk_major_minor(dev, &major,
> &minor))
> + flexarray_append_pair(back, "physical-device",
> + libxl__sprintf(gc, "%x:%x",
> major, minor));
> }
>
> assert(device->backend_kind == LIBXL__DEVICE_KIND_VBD);
> diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
> index 4b51ded..0f50d04 100644
> --- a/tools/libxl/libxl_device.c
> +++ b/tools/libxl/libxl_device.c
> @@ -332,6 +332,8 @@ int libxl__device_physdisk_major_minor(const char
> *physpath, int *major, int *mi
> struct stat buf;
> if (stat(physpath, &buf) < 0)
> return -1;
> + if (!S_ISBLK(buf.st_mode))
> + return -1;
> *major = major(buf.st_rdev);
> *minor = minor(buf.st_rdev);
> return 0;
> diff --git a/tools/libxl/libxl_linux.c b/tools/libxl/libxl_linux.c
> index ea5d8c1..b51930c 100644
> --- a/tools/libxl/libxl_linux.c
> +++ b/tools/libxl/libxl_linux.c
> @@ -19,11 +19,11 @@
>
> int libxl__try_phy_backend(mode_t st_mode)
> {
> - if (!S_ISBLK(st_mode)) {
> - return 0;
> + if (S_ISBLK(st_mode) || S_ISREG(st_mode)) {
> + return 1;
> }
>
> - return 1;
> + return 0;
> }
>
> #define EXT_SHIFT 28
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |