[lvm-devel] master - pvscan: don't activate LVs when use_lvmetad=0

David Teigland teigland at fedoraproject.org
Thu Jun 16 17:08:31 UTC 2016


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f77fe436afb76ddb798d236d34daf50413a184f6
Commit:        f77fe436afb76ddb798d236d34daf50413a184f6
Parent:        944ae4d2df0f15afb29ac0a68d0dd012d9df9acf
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Thu Jun 16 12:04:05 2016 -0500
Committer:     David Teigland <teigland at redhat.com>
CommitterDate: Thu Jun 16 12:04:05 2016 -0500

pvscan: don't activate LVs when use_lvmetad=0

commit 15da467b was meant to address the case where
use_lvmetad=1 in lvm.conf, and lvmetad is not available,
in which case, pvscan --cache -aay should activate LVs.

But the commit unintentionally also changed the case
where use_lvmetad=0 in lvm.conf, in which case
pvscan --cache -aay should not activate LVs, so fix
that here.
---
 tools/pvscan.c |   31 ++++++++++++++++++++-----------
 1 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/tools/pvscan.c b/tools/pvscan.c
index 78dad82..73a97be 100644
--- a/tools/pvscan.c
+++ b/tools/pvscan.c
@@ -306,7 +306,7 @@ static int _pvscan_cache(struct cmd_context *cmd, int argc, char **argv)
 	int devno_args = 0;
 	struct arg_value_group_list *current_group;
 	dev_t devno;
-	int do_activate = 0;
+	int do_activate;
 	int all_vgs = 0;
 	int remove_errors = 0;
 	int add_errors = 0;
@@ -315,17 +315,21 @@ static int _pvscan_cache(struct cmd_context *cmd, int argc, char **argv)
 	dm_list_init(&found_vgnames);
 	dm_list_init(&pp.changed_vgnames);
 
-	if (!lvmetad_used() && !arg_is_set(cmd, activate_ARG)) {
-		log_verbose("Ignoring pvscan --cache command because lvmetad is not in use.");
+	do_activate = arg_is_set(cmd, activate_ARG);
+
+	if (!lvmetad_used() && !do_activate) {
+		log_verbose("Ignoring pvscan --cache because lvmetad is not in use.");
 		return ret;
 	}
 
-	if (arg_is_set(cmd, activate_ARG)) {
-		if (arg_uint_value(cmd, activate_ARG, CHANGE_AAY) != CHANGE_AAY) {
-			log_error("Only --activate ay allowed with pvscan.");
-			return 0;
-		}
-		do_activate = 1;
+	if (do_activate && (arg_uint_value(cmd, activate_ARG, CHANGE_AAY) != CHANGE_AAY)) {
+		log_error("Only --activate ay allowed with pvscan.");
+		return 0;
+	}
+
+	if (!lvmetad_used() && do_activate && !find_config_tree_bool(cmd, global_use_lvmetad_CFG, NULL)) {
+		log_verbose("Ignoring pvscan --cache -aay because lvmetad is not in use.");
+		return ret;
 	}
 
 	if (arg_count(cmd, major_ARG) + arg_count(cmd, minor_ARG))
@@ -341,8 +345,13 @@ static int _pvscan_cache(struct cmd_context *cmd, int argc, char **argv)
 		return ECMD_FAILED;
 	}
 
-	if (!lvmetad_used() && do_activate) {
-		log_verbose("Activating all VGs without lvmetad running.");
+	/*
+	 * This a special case where use_lvmetad=1 in lvm.conf but pvscan
+	 * cannot use lvmetad for some reason.  In this case pvscan should
+	 * still activate LVs even though it's not updating the cache.
+	 */
+	if (do_activate && !lvmetad_used()) {
+		log_verbose("Activating all VGs without lvmetad.");
 		all_vgs = 1;
 		devno_args = 0;
 		goto activate;




More information about the lvm-devel mailing list