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

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