|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 4/7] xl/libxl: add a blkdev_start parameter
Introduce a blkdev_start in xl.conf and pass it to
libxl_domain_create_* and all the way through libxl_run_bootloader and
libxl__device_disk_local_attach.
blkdev_start specifies the first block device to be used for temporary
block device allocations by the toolstack.
Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
---
tools/examples/xl.conf | 3 +++
tools/libxl/libxl.h | 10 +++++++---
tools/libxl/libxl_bootloader.c | 6 ++++--
tools/libxl/libxl_create.c | 18 ++++++++++++------
tools/libxl/libxl_internal.c | 3 ++-
tools/libxl/libxl_internal.h | 3 ++-
tools/libxl/xl.c | 3 +++
tools/libxl/xl.h | 1 +
tools/libxl/xl_cmdimpl.c | 5 +++--
9 files changed, 37 insertions(+), 15 deletions(-)
diff --git a/tools/examples/xl.conf b/tools/examples/xl.conf
index 56d3b3b..ebf057c 100644
--- a/tools/examples/xl.conf
+++ b/tools/examples/xl.conf
@@ -12,3 +12,6 @@
# default output format used by "xl list -l"
#output_format="json"
+
+# first block device to be used for temporary VM disk mounts
+#blkdev_start="xvda"
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 779c8dd..151a6e0 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -464,8 +464,11 @@ int libxl_ctx_free(libxl_ctx *ctx /* 0 is OK */);
/* domain related functions */
typedef int (*libxl_console_ready)(libxl_ctx *ctx, uint32_t domid, void *priv);
-int libxl_domain_create_new(libxl_ctx *ctx, libxl_domain_config *d_config,
libxl_console_ready cb, void *priv, uint32_t *domid);
-int libxl_domain_create_restore(libxl_ctx *ctx, libxl_domain_config *d_config,
libxl_console_ready cb, void *priv, uint32_t *domid, int restore_fd);
+int libxl_domain_create_new(libxl_ctx *ctx, libxl_domain_config *d_config,
+ libxl_console_ready cb, void *priv, uint32_t *domid, char*
blkdev_start);
+int libxl_domain_create_restore(libxl_ctx *ctx, libxl_domain_config *d_config,
+ libxl_console_ready cb, void *priv, uint32_t *domid, int
restore_fd,
+ char *blkdev_start);
void libxl_domain_config_dispose(libxl_domain_config *d_config);
int libxl_domain_suspend(libxl_ctx *ctx, libxl_domain_suspend_info *info,
uint32_t domid, int fd);
@@ -493,7 +496,8 @@ int libxl_get_max_cpus(libxl_ctx *ctx);
int libxl_run_bootloader(libxl_ctx *ctx,
libxl_domain_build_info *info,
libxl_device_disk *disk,
- uint32_t domid);
+ uint32_t domid,
+ char *blkdev_start);
/* 0 means ERROR_ENOMEM, which we have logged */
diff --git a/tools/libxl/libxl_bootloader.c b/tools/libxl/libxl_bootloader.c
index 429253d..fe56615 100644
--- a/tools/libxl/libxl_bootloader.c
+++ b/tools/libxl/libxl_bootloader.c
@@ -323,7 +323,8 @@ static void parse_bootloader_result(libxl__gc *gc,
int libxl_run_bootloader(libxl_ctx *ctx,
libxl_domain_build_info *info,
libxl_device_disk *disk,
- uint32_t domid)
+ uint32_t domid,
+ char *blkdev_start)
{
GC_INIT(ctx);
int ret, rc = 0;
@@ -387,7 +388,8 @@ int libxl_run_bootloader(libxl_ctx *ctx,
goto out_close;
}
- diskpath = libxl__device_disk_local_attach(gc, disk, &tmpdisk);
+ diskpath = libxl__device_disk_local_attach(gc, disk, &tmpdisk,
+ blkdev_start);
if (!diskpath) {
goto out_close;
}
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index 6029445..5064bc3 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -544,7 +544,8 @@ static int store_libxl_entry(libxl__gc *gc, uint32_t domid,
static int do_domain_create(libxl__gc *gc, libxl_domain_config *d_config,
libxl_console_ready cb, void *priv,
- uint32_t *domid_out, int restore_fd)
+ uint32_t *domid_out, int restore_fd,
+ char* blkdev_start)
{
libxl_ctx *ctx = libxl__gc_owner(gc);
libxl__spawner_starting *dm_starting = 0;
@@ -581,7 +582,9 @@ static int do_domain_create(libxl__gc *gc,
libxl_domain_config *d_config,
}
if ( restore_fd < 0 ) {
- ret = libxl_run_bootloader(ctx, &d_config->b_info, d_config->num_disks
> 0 ? &d_config->disks[0] : NULL, domid);
+ ret = libxl_run_bootloader(ctx, &d_config->b_info,
+ d_config->num_disks > 0 ? &d_config->disks[0] : NULL,
+ domid, blkdev_start);
if (ret) {
LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
"failed to run bootloader: %d", ret);
@@ -735,21 +738,24 @@ error_out:
}
int libxl_domain_create_new(libxl_ctx *ctx, libxl_domain_config *d_config,
- libxl_console_ready cb, void *priv, uint32_t
*domid)
+ libxl_console_ready cb, void *priv, uint32_t
*domid,
+ char* blkdev_start)
{
GC_INIT(ctx);
int rc;
- rc = do_domain_create(gc, d_config, cb, priv, domid, -1);
+ rc = do_domain_create(gc, d_config, cb, priv, domid, -1, blkdev_start);
GC_FREE;
return rc;
}
int libxl_domain_create_restore(libxl_ctx *ctx, libxl_domain_config *d_config,
- libxl_console_ready cb, void *priv, uint32_t
*domid, int restore_fd)
+ libxl_console_ready cb, void *priv, uint32_t
*domid,
+ int restore_fd,
char *blkdev_start)
{
GC_INIT(ctx);
int rc;
- rc = do_domain_create(gc, d_config, cb, priv, domid, restore_fd);
+ rc = do_domain_create(gc, d_config, cb, priv, domid, restore_fd,
+ blkdev_start);
GC_FREE;
return rc;
}
diff --git a/tools/libxl/libxl_internal.c b/tools/libxl/libxl_internal.c
index 9ecfcc7..6131ec5 100644
--- a/tools/libxl/libxl_internal.c
+++ b/tools/libxl/libxl_internal.c
@@ -482,7 +482,8 @@ out:
_hidden char * libxl__device_disk_local_attach(libxl__gc *gc,
const libxl_device_disk *disk,
- libxl_device_disk **new_disk)
+ libxl_device_disk **new_disk,
+ char *blkdev_start)
{
libxl_ctx *ctx = gc->owner;
char *dev = NULL;
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index c171f24..aab8300 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -1013,7 +1013,8 @@ _hidden int libxl__device_disk_add_t(libxl__gc *gc,
uint32_t domid,
*/
_hidden char * libxl__device_disk_local_attach(libxl__gc *gc,
const libxl_device_disk *disk,
- libxl_device_disk **new_disk);
+ libxl_device_disk **new_disk,
+ char *blkdev_start);
_hidden int libxl__device_disk_local_detach(libxl__gc *gc,
libxl_device_disk *disk);
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
index a6ffd25..6a735e9 100644
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -35,6 +35,7 @@
xentoollog_logger_stdiostream *logger;
int dryrun_only;
int autoballoon = 1;
+char *blkdev_start = "xvda";
char *lockfile;
char *default_vifscript = NULL;
char *default_bridge = NULL;
@@ -91,6 +92,8 @@ static void parse_global_config(const char *configfile,
fprintf(stderr, "invalid default output format \"%s\"\n", buf);
}
}
+ if (!xlu_cfg_get_string (config, "blkdev_start", &buf, 0))
+ blkdev_start = strdup(buf);
xlu_cfg_destroy(config);
}
diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h
index 7e258d5..dba2c94 100644
--- a/tools/libxl/xl.h
+++ b/tools/libxl/xl.h
@@ -113,6 +113,7 @@ extern int dryrun_only;
extern char *lockfile;
extern char *default_vifscript;
extern char *default_bridge;
+extern char *blkdev_start;
enum output_format {
OUTPUT_FORMAT_JSON,
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index c9e9943..1a3945c 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1669,7 +1669,7 @@ start:
if ( restore_file ) {
ret = libxl_domain_create_restore(ctx, &d_config,
cb, &child_console_pid,
- &domid, restore_fd);
+ &domid, restore_fd, blkdev_start);
/*
* On subsequent reboot etc we should create the domain, not
* restore/migrate-receive it again.
@@ -1677,7 +1677,8 @@ start:
restore_file = NULL;
}else{
ret = libxl_domain_create_new(ctx, &d_config,
- cb, &child_console_pid, &domid);
+ cb, &child_console_pid, &domid,
+
blkdev_start);
}
if ( ret )
goto error_out;
--
1.7.2.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |