WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH 10 of 10] libxl: "script:" prefix in block device

To: Marek Marczykowski <marmarek@xxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH 10 of 10] libxl: "script:" prefix in block device description to setup vbd by hotplug scripts
From: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
Date: Fri, 3 Jun 2011 09:24:21 +0100
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Fri, 03 Jun 2011 01:24:52 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1e3bf3cb3944402e01c5.1307054140@devel14>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: Citrix Systems, Inc.
References: <patchbomb.1307054130@devel14> <1e3bf3cb3944402e01c5.1307054140@devel14>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
On Thu, 2011-06-02 at 23:35 +0100, Marek Marczykowski wrote:
> # HG changeset patch
> # User Marek Marczykowski <marmarek@xxxxxxxxxxxx>
> # Date 1306963204 -7200
> # Node ID 1e3bf3cb3944402e01c57c400a02fe4293153458
> # Parent  10bdf8aa5b8a1cb2178f2b9cbcc9ce2fd5644403
> libxl: "script:" prefix in block device description to setup vbd by hotplug 
> scripts
> 
> Implements old behaviour of block-attach - only write parameters to xenstore
> and left all work for hotplug scripts. Allows to directly reuse xen block
> scripts (and maybe some custom ones). Example use:
> 
> xl block-attach vm "script:nbd 1.1.1.1 9999" xvdg w
> 
> Signed-off-by: Marek Marczykowski <marmarek@xxxxxxxxxxxx>

I didn't review this one, I think it probably interacts badly with (or
more likely is obsoleted by) Ian Jackson's recent disk parsing cleanup
series.

Ian.

> 
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -896,6 +896,13 @@
>          }
>      }
>  
> +    if (disk->backend == DISK_BACKEND_SCRIPT) {
> +        delimiter = strchr(file_name, ':');
> +        if (!delimiter)
> +            return ERROR_INVAL;
> +        return 0;
> +    }
> +
>      if ( stat(file_name, &stat_buf) != 0 ) {
>          LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "failed to stat %s", 
> file_name);
>          return ERROR_INVAL;
> @@ -965,6 +972,24 @@
>  
>              device.backend_kind = DEVICE_VBD;
>              break;
> +        case DISK_BACKEND_SCRIPT:
> +                     {
> +                             char *delimiter;
> +                             backend_type = libxl__strdup(&gc, 
> disk->pdev_path);
> +                             delimiter = strchr(backend_type, ':');
> +                             if (!delimiter) {
> +                                     rc = ERROR_FAIL;
> +                                     goto out_free;
> +                             }
> +                             *delimiter = '\0';
> +                             flexarray_append(back, "params");
> +                             flexarray_append(back, delimiter+1);
> +                flexarray_append(back, "scripted");
> +                flexarray_append(back, "1");
> +
> +                             device.backend_kind = DEVICE_VBD;
> +                     }
> +            break;
>          case DISK_BACKEND_TAP:
>              if (libxl__blktap_enabled(&gc) && disk->format != 
> DISK_FORMAT_EMPTY) {
>                  const char *dev = libxl__blktap_devpath(&gc,
> @@ -1060,7 +1085,7 @@
>      device.backend_domid    = disk->backend_domid;
>      device.backend_devid    = devid;
>      device.backend_kind     = 
> -        (disk->backend == DISK_BACKEND_PHY) ? DEVICE_VBD : DEVICE_TAP;
> +        (disk->backend == DISK_BACKEND_PHY || disk->backend == 
> DISK_BACKEND_SCRIPT) ? DEVICE_VBD : DEVICE_TAP;
>      device.domid            = disk->domid;
>      device.devid            = devid;
>      device.kind             = DEVICE_VBD;
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -185,6 +185,7 @@
>      DISK_BACKEND_PHY,
>      DISK_BACKEND_TAP,
>      DISK_BACKEND_QDISK,
> +    DISK_BACKEND_SCRIPT,
>  } libxl_disk_backend;
>  
>  typedef enum {
> diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
> --- a/tools/libxl/libxl_device.c
> +++ b/tools/libxl/libxl_device.c
> @@ -139,6 +139,7 @@
>          case DISK_BACKEND_QDISK: return "qdisk";
>          case DISK_BACKEND_TAP: return "tap";
>          case DISK_BACKEND_PHY: return "phy";
> +        case DISK_BACKEND_SCRIPT: return "script";
>          default: return NULL;
>      }
>  }
> diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
> --- a/tools/libxl/libxl_utils.c
> +++ b/tools/libxl/libxl_utils.c
> @@ -282,6 +282,8 @@
>  
>      if (!strcmp(s, "phy")) {
>          *backend = DISK_BACKEND_PHY;
> +    } else if (!strcmp(s, "script")) {
> +        *backend = DISK_BACKEND_SCRIPT;
>      } else if (!strcmp(s, "file")) {
>          *backend = DISK_BACKEND_TAP;
>      } else if (!strcmp(s, "tap")) {
> @@ -553,8 +555,13 @@
>      disk->domid = domid;
>      be_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
> "%s/backend", diskpath));
>      disk->pdev_path = strdup(libxl__xs_read(&gc, XBT_NULL, 
> libxl__sprintf(&gc, "%s/params", be_path)));
> -    val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", 
> be_path));
> -    libxl_string_to_backend(ctx, val, &(disk->backend));
> +    val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/scripted", 
> be_path));
> +    if (val && atoi(val))
> +        disk->backend = DISK_BACKEND_SCRIPT;
> +    else {
> +        val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", 
> be_path));
> +        libxl_string_to_backend(ctx, val, &(disk->backend));
> +    }
>      disk->vdev = strdup(libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
> "%s/dev", be_path)));
>      val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/removable", 
> be_path));
>      disk->unpluggable = !strcmp(val, "1");
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -481,6 +481,10 @@
>                      state = DSTATE_PHYSPATH;
>                      disk->format = DISK_FORMAT_RAW;
>                      disk->backend = DISK_BACKEND_PHY;
> +                }else if ( !strcmp(tok, "script") ) {
> +                    state = DSTATE_PHYSPATH;
> +                    disk->format = DISK_FORMAT_RAW;
> +                    disk->backend = DISK_BACKEND_SCRIPT;
>                  }else if ( !strcmp(tok, "file") ) {
>                      state = DSTATE_PHYSPATH;
>                      disk->format = DISK_FORMAT_RAW;
> @@ -4435,6 +4439,8 @@
>      tok = strtok(argv[optind+1], ":");
>      if (!strcmp(tok, "phy")) {
>          disk.backend = DISK_BACKEND_PHY;
> +    } else if (!strcmp(tok, "script")) {
> +        disk.backend = DISK_BACKEND_SCRIPT;
>      } else if (!strcmp(tok, "file")) {
>          disk.backend = DISK_BACKEND_TAP;
>      } else if (!strcmp(tok, "tap")) {
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel