|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v8 10/15] libxl: add option to choose who executes hotplug scripts
On Wed, 2012-07-04 at 12:59 +0100, Roger Pau Monne wrote:
> Add and option to xl.conf file to decide if hotplug scripts are
> executed from the toolstack (xl) or from udev as it used to be in the
> past.
>
> This option is only introduced in this patch, but it has no effect
> since the code to call hotplug scripts from libxl is introduced in a
> latter patch.
>
> This choice will be saved in "libxl/disable_udev", as specified in the
> DISABLE_UDEV_PATH constant.
>
> Changes since v2:
>
> * Change atoi(...) to !!atoi(...) to prevent returning negative
> values from xenstore (which will be handled as errors).
>
> * Check for errors on the return value of libxl__hotplug_settings.
>
> Changes since v1:
>
> * Used an auxiliary function to check for the current setting.
>
> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxx>
> ---
> docs/man/xl.conf.pod.5 | 8 ++++++++
> tools/examples/xl.conf | 5 +++++
> tools/libxl/libxl_create.c | 38 +++++++++++++++++++++++++++++++++++++-
> tools/libxl/libxl_dm.c | 4 ++++
> tools/libxl/libxl_internal.c | 19 +++++++++++++++++++
> tools/libxl/libxl_internal.h | 3 +++
> tools/libxl/libxl_types.idl | 1 +
> tools/libxl/xl.c | 4 ++++
> tools/libxl/xl.h | 1 +
> tools/libxl/xl_cmdimpl.c | 1 +
> 10 files changed, 83 insertions(+), 1 deletions(-)
>
> diff --git a/docs/man/xl.conf.pod.5 b/docs/man/xl.conf.pod.5
> index 149430c..23932be 100644
> --- a/docs/man/xl.conf.pod.5
> +++ b/docs/man/xl.conf.pod.5
> @@ -55,6 +55,14 @@ default.
>
> Default: C<1>
>
> +=item B<run_hotplug_scripts=BOOLEAN>
> +
> +If disabled hotplug scripts will be called from udev, as it used to
> +be in the previous releases. With the default option, hotplug scripts
> +will be launched by xl directly.
> +
> +Default: C<1>
> +
> =item B<lockfile="PATH">
>
> Sets the path to the lock file used by xl to serialise certain
> diff --git a/tools/examples/xl.conf b/tools/examples/xl.conf
> index ebf057c..28ab796 100644
> --- a/tools/examples/xl.conf
> +++ b/tools/examples/xl.conf
> @@ -15,3 +15,8 @@
>
> # first block device to be used for temporary VM disk mounts
> #blkdev_start="xvda"
> +
> +# default option to run hotplug scripts from xl
> +# if disabled the old behaviour will be used, and hotplug scripts will be
> +# launched by udev.
> +#run_hotplug_scripts=1
> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
> index 6f4c865..c584c4e 100644
> --- a/tools/libxl/libxl_create.c
> +++ b/tools/libxl/libxl_create.c
> @@ -70,6 +70,8 @@ int libxl__domain_create_info_setdefault(libxl__gc *gc,
> libxl_defbool_setdefault(&c_info->oos, true);
> }
>
> + libxl_defbool_setdefault(&c_info->run_hotplug_scripts, true);
> +
> return 0;
> }
>
> @@ -382,7 +384,7 @@ int libxl__domain_make(libxl__gc *gc,
> libxl_domain_create_info *info,
> uint32_t *domid)
> {
> libxl_ctx *ctx = libxl__gc_owner(gc);
> - int flags, ret, rc;
> + int flags, ret, rc, nb_vm;
> char *uuid_string;
> char *dom_path, *vm_path, *libxl_path;
> struct xs_permissions roperm[2];
> @@ -503,6 +505,40 @@ retry_transaction:
> libxl__sprintf(gc, "%s/hvmloader/generation-id-address",
> dom_path),
> rwperm, ARRAY_SIZE(rwperm));
>
> + if (libxl_list_vm(ctx, &nb_vm) < 0) {
This will leak the returned list of vms...
> + LOG(ERROR, "cannot get number of running guests");
> + rc = ERROR_FAIL;
> + goto out;
> + }
> +
> + int hotplug_setting = libxl__hotplug_settings(gc, t);
> + if (hotplug_setting < 0) {
> + LOG(ERROR, "unable to get current hotplug scripts execution
> setting");
> + rc = ERROR_FAIL;
> + goto out;
> + }
> + if (libxl_defbool_val(info->run_hotplug_scripts) != hotplug_setting &&
> + (nb_vm - 1)) {
> + LOG(ERROR, "cannot change hotplug execution option once set, "
> + "please shutdown all guests before changing it");
> + rc = ERROR_FAIL;
> + goto out;
> + }
> +
> + if (libxl_defbool_val(info->run_hotplug_scripts)) {
> + rc = libxl__xs_write(gc, t, DISABLE_UDEV_PATH, "1");
> + if (rc) {
> + LOGE(ERROR, "unable to write %s = 1", DISABLE_UDEV_PATH);
> + goto out;
> + }
> + } else {
> + rc = xs_rm(ctx->xsh, t, DISABLE_UDEV_PATH);
> + if (rc) {
> + LOGE(ERROR, "unable to delete %s", DISABLE_UDEV_PATH);
> + goto out;
> + }
> + }
You could use libxl__xs_{write,rm}_checked here I think.
> +
> xs_write(ctx->xsh, t, libxl__sprintf(gc, "%s/uuid", vm_path),
> uuid_string, strlen(uuid_string));
> xs_write(ctx->xsh, t, libxl__sprintf(gc, "%s/name", vm_path),
> info->name, strlen(info->name));
>
> diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
> index b4a5f1f..612e9db 100644
> --- a/tools/libxl/libxl_dm.c
> +++ b/tools/libxl/libxl_dm.c
> @@ -762,6 +762,10 @@ void libxl__spawn_stub_dm(libxl__egc *egc,
> libxl__stub_dm_spawn_state *sdss)
> dm_config->nics = guest_config->nics;
> dm_config->num_nics = guest_config->num_nics;
>
> + libxl_defbool_set(
> + &dm_config->c_info.run_hotplug_scripts,
> + libxl_defbool_val(guest_config->c_info.run_hotplug_scripts));
This is the same as:
dm_config->c_info.run_hotplug_scripts =
guest_config->c_info.run_hotplug_scripts;
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |