Blame SOURCES/0026-lvmdevices-check-error-exit-if-update-is-needed.patch

38b7b2
From bb477d63e336a10e5959962a9f26a028ea9e55eb Mon Sep 17 00:00:00 2001
38b7b2
From: David Teigland <teigland@redhat.com>
38b7b2
Date: Thu, 13 Jan 2022 14:52:54 -0600
38b7b2
Subject: [PATCH 26/54] lvmdevices check: error exit if update is needed
38b7b2
38b7b2
. error exit means that lvmdevices --update would make a change.
38b7b2
38b7b2
. remove check of PART field from --check because it isn't used.
38b7b2
38b7b2
. unlink searched_devnames file to ensure check|update will search
38b7b2
---
38b7b2
 lib/device/device_id.c             |  3 ++-
38b7b2
 test/shell/devicesfile-realdevs.sh |  8 +++----
38b7b2
 tools/args.h                       |  3 ++-
38b7b2
 tools/lvmdevices.c                 | 37 +++++++++++++-----------------
38b7b2
 4 files changed, 24 insertions(+), 27 deletions(-)
38b7b2
38b7b2
diff --git a/lib/device/device_id.c b/lib/device/device_id.c
38b7b2
index 0621bc858..a33dcebe0 100644
38b7b2
--- a/lib/device/device_id.c
38b7b2
+++ b/lib/device/device_id.c
38b7b2
@@ -2271,7 +2271,8 @@ void device_ids_find_renamed_devs(struct cmd_context *cmd, struct dm_list *dev_l
38b7b2
 			continue;
38b7b2
 		}
38b7b2
 
38b7b2
-		log_warn("Devices file PVID %s updating IDNAME to %s.", dev->pvid, devname);
38b7b2
+		if (!noupdate)
38b7b2
+			log_warn("Devices file PVID %s updating IDNAME to %s.", dev->pvid, devname);
38b7b2
 
38b7b2
 		free(du->idname);
38b7b2
 		free(du->devname);
38b7b2
diff --git a/test/shell/devicesfile-realdevs.sh b/test/shell/devicesfile-realdevs.sh
38b7b2
index 8d4aa3e67..23d4bedb4 100644
38b7b2
--- a/test/shell/devicesfile-realdevs.sh
38b7b2
+++ b/test/shell/devicesfile-realdevs.sh
38b7b2
@@ -423,7 +423,7 @@ sed "s/$pvid1/badpvid/" "$DF.orig" |tee $DF
38b7b2
 not grep $pvid1 $DF
38b7b2
 grep $did1 $DF
38b7b2
 
38b7b2
-lvmdevices --check 2>&1|tee out
38b7b2
+not lvmdevices --check 2>&1|tee out
38b7b2
 grep $dev1 out
38b7b2
 grep badpvid out
38b7b2
 grep $pvid1 out
38b7b2
@@ -493,7 +493,7 @@ rm $DF
38b7b2
 d1=$(basename $dev1)
38b7b2
 d3=$(basename $dev3)
38b7b2
 sed "s/$d1/$d3/" "$DF.orig" |tee $DF
38b7b2
-lvmdevices --check 2>&1 |tee out
38b7b2
+not lvmdevices --check 2>&1 |tee out
38b7b2
 grep $dev1 out
38b7b2
 
38b7b2
 lvmdevices --update
38b7b2
@@ -515,7 +515,7 @@ sed "s/$d1/tmp/" "$DF.orig" |tee ${DF}_1
38b7b2
 sed "s/$d2/$d1/" "${DF}_1" |tee ${DF}_2
38b7b2
 sed "s/tmp/$d2/" "${DF}_2" |tee $DF
38b7b2
 rm ${DF}_1 ${DF}_2
38b7b2
-lvmdevices --check 2>&1 |tee out
38b7b2
+not lvmdevices --check 2>&1 |tee out
38b7b2
 grep $dev1 out
38b7b2
 grep $dev2 out
38b7b2
 
38b7b2
@@ -536,7 +536,7 @@ rm $DF
38b7b2
 d1=$(basename $dev1)
38b7b2
 d3=$(basename $dev3)
38b7b2
 sed "s/$d1/$d3/" "$DF.orig" |tee $DF
38b7b2
-lvmdevices --check 2>&1 |tee out
38b7b2
+not lvmdevices --check 2>&1 |tee out
38b7b2
 grep $dev1 out
38b7b2
 
38b7b2
 pvs -o+uuid,deviceid | grep $vg |tee out
38b7b2
diff --git a/tools/args.h b/tools/args.h
38b7b2
index 774ce33f4..9a7bf81b2 100644
38b7b2
--- a/tools/args.h
38b7b2
+++ b/tools/args.h
38b7b2
@@ -153,7 +153,8 @@ arg(cachesize_ARG, '\0', "cachesize", sizemb_VAL, 0, 0,
38b7b2
     "The size of cache to use.\n")
38b7b2
 
38b7b2
 arg(check_ARG, '\0', "check", 0, 0, 0,
38b7b2
-    "Check the content of the devices file.\n")
38b7b2
+    "Checks the content of the devices file.\n"
38b7b2
+    "Reports incorrect device names or PVIDs for entries.\n")
38b7b2
 
38b7b2
 arg(commandprofile_ARG, '\0', "commandprofile", string_VAL, 0, 0,
38b7b2
     "The command profile to use for command configuration.\n"
38b7b2
diff --git a/tools/lvmdevices.c b/tools/lvmdevices.c
38b7b2
index 3f104f7de..c50c09f90 100644
38b7b2
--- a/tools/lvmdevices.c
38b7b2
+++ b/tools/lvmdevices.c
38b7b2
@@ -128,7 +128,6 @@ int lvmdevices(struct cmd_context *cmd, int argc, char **argv)
38b7b2
 	struct device *dev;
38b7b2
 	struct dev_use *du, *du2;
38b7b2
 	const char *deviceidtype;
38b7b2
-	int changes = 0;
38b7b2
 
38b7b2
 	dm_list_init(&search_pvids);
38b7b2
 	dm_list_init(&found_devs);
38b7b2
@@ -184,8 +183,11 @@ int lvmdevices(struct cmd_context *cmd, int argc, char **argv)
38b7b2
 
38b7b2
 	if (arg_is_set(cmd, check_ARG) || arg_is_set(cmd, update_ARG)) {
38b7b2
 		int search_count = 0;
38b7b2
+		int update_needed = 0;
38b7b2
 		int invalid = 0;
38b7b2
 
38b7b2
+		unlink_searched_devnames(cmd);
38b7b2
+
38b7b2
 		label_scan_setup_bcache();
38b7b2
 
38b7b2
 		dm_list_iterate_items(du, &cmd->use_devices) {
38b7b2
@@ -225,6 +227,8 @@ int lvmdevices(struct cmd_context *cmd, int argc, char **argv)
38b7b2
 		 * run just above.
38b7b2
 		 */
38b7b2
 		device_ids_validate(cmd, NULL, &invalid, 1);
38b7b2
+		if (invalid)
38b7b2
+			update_needed = 1;
38b7b2
 
38b7b2
 		/*
38b7b2
 		 * Find and fix any devname entries that have moved to a
38b7b2
@@ -240,33 +244,24 @@ int lvmdevices(struct cmd_context *cmd, int argc, char **argv)
38b7b2
 				label_scan_invalidate(du->dev);
38b7b2
 		}
38b7b2
 
38b7b2
-		/*
38b7b2
-		 * check du->part
38b7b2
-		 */
38b7b2
-		dm_list_iterate_items(du, &cmd->use_devices) {
38b7b2
-			int part = 0;
38b7b2
-			if (!du->dev)
38b7b2
-				continue;
38b7b2
-			dev = du->dev;
38b7b2
-
38b7b2
-			dev_get_partition_number(dev, &part);
38b7b2
-
38b7b2
-			if (part != du->part) {
38b7b2
-				log_warn("Device %s partition %u has incorrect PART in devices file (%u)",
38b7b2
-					 dev_name(dev), part, du->part);
38b7b2
-				du->part = part;
38b7b2
-				changes++;
38b7b2
-			}
38b7b2
-		}
38b7b2
-
38b7b2
 		if (arg_is_set(cmd, update_ARG)) {
38b7b2
-			if (invalid || !dm_list_empty(&found_devs)) {
38b7b2
+			if (update_needed || !dm_list_empty(&found_devs)) {
38b7b2
 				if (!device_ids_write(cmd))
38b7b2
 					goto_bad;
38b7b2
 				log_print("Updated devices file to version %s", devices_file_version());
38b7b2
 			} else {
38b7b2
 				log_print("No update for devices file is needed.");
38b7b2
 			}
38b7b2
+		} else {
38b7b2
+			/*
38b7b2
+			 * --check exits with an error if the devices file
38b7b2
+			 * needs updates, i.e. running --update would make
38b7b2
+			 * changes.
38b7b2
+			 */
38b7b2
+			if (update_needed) {
38b7b2
+				log_error("Updates needed for devices file.");
38b7b2
+				goto bad;
38b7b2
+			}
38b7b2
 		}
38b7b2
 		goto out;
38b7b2
 	}
38b7b2
-- 
38b7b2
2.34.3
38b7b2