[libvirt] [PATCH 2/2] Implementation deficiency in virInitctlSetRunLevel v3

Daniel P. Berrange berrange at redhat.com
Fri Dec 20 15:59:03 UTC 2013


On Fri, Dec 20, 2013 at 07:42:28PM +0400, Reco wrote:
> Use helper virProcessRunInMountNamespace in lxcDomainShutdownFlags and
> lxcDomainReboot.
> 
> ---
>  src/lxc/lxc_driver.c |   44 ++++++++++++++++++++++++++++----------------
>  1 file changed, 28 insertions(+), 16 deletions(-)
> 
> diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
> index e5298d1..7f4acbe 100644
> --- a/src/lxc/lxc_driver.c
> +++ b/src/lxc/lxc_driver.c
> @@ -2694,12 +2694,21 @@ lxcConnectListAllDomains(virConnectPtr conn,
>  
>  
>  static int
> +virDomainShutdownCallback(pid_t pid ATTRIBUTE_UNUSED,
> +                          void* opaque ATTRIBUTE_UNUSED)

Nitpick - the '*' should associate with 'opaque' rather than 'void'

> +{
> +    int rc;
> +    rc = virInitctlSetRunLevel(VIR_INITCTL_RUNLEVEL_POWEROFF, NULL);
> +    return rc;
> +}
> +
> +
> +static int
>  lxcDomainShutdownFlags(virDomainPtr dom,
>                         unsigned int flags)
>  {
>      virLXCDomainObjPrivatePtr priv;
>      virDomainObjPtr vm;
> -    char *vroot = NULL;
>      int ret = -1;
>      int rc;
>  
> @@ -2726,14 +2735,12 @@ lxcDomainShutdownFlags(virDomainPtr dom,
>          goto cleanup;
>      }
>  
> -    if (virAsprintf(&vroot, "/proc/%llu/root",
> -                    (unsigned long long)priv->initpid) < 0)
> -        goto cleanup;
> -
>      if (flags == 0 ||
>          (flags & VIR_DOMAIN_SHUTDOWN_INITCTL)) {
> -        if ((rc = virInitctlSetRunLevel(VIR_INITCTL_RUNLEVEL_POWEROFF,
> -                                        vroot)) < 0) {
> +        rc = virProcessRunInMountNamespace(priv->initpid,
> +                                           (virProcessNamespaceCallback) virDomainShutdownCallback,

I think you can leave out the (virProcessNamespaceCallback) cast
here, since the function prototype already matches what is
required.

> +                                           NULL);
> +        if (rc < 0) {
>              goto cleanup;
>          }
>          if (rc == 0 && flags != 0 &&
> @@ -2761,7 +2768,6 @@ lxcDomainShutdownFlags(virDomainPtr dom,
>      ret = 0;
>  
>  cleanup:
> -    VIR_FREE(vroot);
>      if (vm)
>          virObjectUnlock(vm);
>      return ret;
> @@ -2773,13 +2779,22 @@ lxcDomainShutdown(virDomainPtr dom)
>      return lxcDomainShutdownFlags(dom, 0);
>  }
>  
> +
> +virDomainRebootCallback(pid_t pid ATTRIBUTE_UNUSED,
> +                        void* opaque ATTRIBUTE_UNUSED)

Same nitpick

> +{
> +    int rc;
> +    rc = virInitctlSetRunLevel(VIR_INITCTL_RUNLEVEL_REBOOT, NULL);
> +    return rc;
> +}
> +
> +
>  static int
>  lxcDomainReboot(virDomainPtr dom,
>                  unsigned int flags)
>  {
>      virLXCDomainObjPrivatePtr priv;
>      virDomainObjPtr vm;
> -    char *vroot = NULL;
>      int ret = -1;
>      int rc;
>  
> @@ -2806,14 +2821,12 @@ lxcDomainReboot(virDomainPtr dom,
>          goto cleanup;
>      }
>  
> -    if (virAsprintf(&vroot, "/proc/%llu/root",
> -                    (unsigned long long)priv->initpid) < 0)
> -        goto cleanup;
> -
>      if (flags == 0 ||
>          (flags & VIR_DOMAIN_REBOOT_INITCTL)) {
> -        if ((rc = virInitctlSetRunLevel(VIR_INITCTL_RUNLEVEL_REBOOT,
> -                                        vroot)) < 0) {
> +        rc = virProcessRunInMountNamespace(priv->initpid,
> +                                           (virProcessNamespaceCallback) virDomainRebootCallback,

And here

> +                                           NULL);
> +        if (rc < 0) {
>              goto cleanup;
>          }
>          if (rc == 0 && flags != 0 &&

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list