[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 10 of 10] libxl: "script:" prefix in block device description to setup vbd by hotplug scripts
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |