[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.