[Libguestfs] [PATCH 2/5] daemon: lvm-filter: start lvmetad better
Richard W.M. Jones
rjones at redhat.com
Tue Jul 26 15:53:27 UTC 2016
On Tue, Jul 26, 2016 at 05:41:26PM +0200, Pino Toscano wrote:
> Currently lvmetad is started in init, and thus using the system
> (= appliance) configuration of lvm. Later on, in the daemon, a local
> copy of the lvm configuration is setup, and set it for use using the
> LVM_SYSTEM_DIR environment variable: this means only the programmes
> executed by the daemon will use the local lvm configuration, and not
> lvmetad.
>
> Thus manually start lvmetad from the daemon, right after having setup
> the local lvm configuration, and still without failing if it cannot be
> executed.
>
> Additionally, since lvmetad now respects the right configuration, make
> sure to update its cache when rescanning the VGs by passing --cache to
> vgscan.
Can we move the lvmetad start up to another function? Either that or
change the name of the copy_lvm function to more accurately reflect
what it does now.
Rich.
> appliance/init | 1 -
> daemon/lvm-filter.c | 13 ++++++++++++-
> daemon/lvm.c | 2 +-
> 3 files changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/appliance/init b/appliance/init
> index 3816dfd..d440007 100755
> --- a/appliance/init
> +++ b/appliance/init
> @@ -131,7 +131,6 @@ mdadm -As --auto=yes --run
>
> # Scan for LVM.
> modprobe dm_mod ||:
> -lvmetad ||:
>
> lvm vgchange -aay --sysinit
>
> diff --git a/daemon/lvm-filter.c b/daemon/lvm-filter.c
> index 8629aab..2add95a 100644
> --- a/daemon/lvm-filter.c
> +++ b/daemon/lvm-filter.c
> @@ -39,6 +39,7 @@
> GUESTFSD_EXT_CMD(str_lvm, lvm);
> GUESTFSD_EXT_CMD(str_cp, cp);
> GUESTFSD_EXT_CMD(str_rm, rm);
> +GUESTFSD_EXT_CMD(str_lvmetad, lvmetad);
>
> /* This runs during daemon start up and creates a complete copy of
> * /etc/lvm so that we can modify it as we desire. We set
> @@ -97,6 +98,16 @@ copy_lvm (void)
> snprintf (env, sizeof env, "%s/lvm", lvm_system_dir);
> setenv ("LVM_SYSTEM_DIR", env, 1);
>
> + /* Try to run lvmetad, without failing if it couldn't. */
> + snprintf (cmd, sizeof cmd, "%s", str_lvmetad);
> + if (verbose)
> + printf ("%s\n", cmd);
> + r = system (cmd);
> + if (r == -1)
> + perror ("system/lvmetad");
> + else if (!WIFEXITED (r) || WEXITSTATUS (r) != 0)
> + fprintf (stderr, "warning: lvmetad command failed\n");
> +
> /* Set a handler to remove the temporary directory at exit. */
> atexit (rm_lvm_system_dir);
> }
> @@ -247,7 +258,7 @@ rescan (void)
> unlink (lvm_cache);
>
> CLEANUP_FREE char *err = NULL;
> - int r = command (NULL, &err, str_lvm, "vgscan", NULL);
> + int r = command (NULL, &err, str_lvm, "vgscan", "--cache", NULL);
> if (r == -1) {
> reply_with_error ("vgscan: %s", err);
> return -1;
> diff --git a/daemon/lvm.c b/daemon/lvm.c
> index d4909ad..e21f7c1 100644
> --- a/daemon/lvm.c
> +++ b/daemon/lvm.c
> @@ -794,7 +794,7 @@ do_vgscan (void)
> int r;
>
> r = command (NULL, &err,
> - str_lvm, "vgscan", NULL);
> + str_lvm, "vgscan", "--cache", NULL);
> if (r == -1) {
> reply_with_error ("%s", err);
> return -1;
> --
> 2.7.4
>
> _______________________________________________
> Libguestfs mailing list
> Libguestfs at redhat.com
> https://www.redhat.com/mailman/listinfo/libguestfs
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
More information about the Libguestfs
mailing list