Blame SOURCES/0035-devices-simplify-dev_cache_get_by_devt.patch

4d51e5
From 8552290efae4905fd1a942be8e752842b11f1881 Mon Sep 17 00:00:00 2001
4d51e5
From: David Teigland <teigland@redhat.com>
4d51e5
Date: Thu, 24 Feb 2022 15:57:29 -0600
4d51e5
Subject: [PATCH 35/54] devices: simplify dev_cache_get_by_devt
4d51e5
4d51e5
remove unused args, and no callers need or want a
4d51e5
repeated dev_cache_scan if there is no dev from the
4d51e5
lookup.
4d51e5
---
4d51e5
 lib/device/dev-cache.c | 60 ++++--------------------------------------
4d51e5
 lib/device/dev-cache.h |  2 +-
4d51e5
 lib/label/label.c      |  2 +-
4d51e5
 tools/pvscan.c         |  6 ++---
4d51e5
 4 files changed, 10 insertions(+), 60 deletions(-)
4d51e5
4d51e5
diff --git a/lib/device/dev-cache.c b/lib/device/dev-cache.c
4d51e5
index c6e5f68cf..cc1af7c7a 100644
4d51e5
--- a/lib/device/dev-cache.c
4d51e5
+++ b/lib/device/dev-cache.c
4d51e5
@@ -1577,63 +1577,13 @@ struct device *dev_cache_get(struct cmd_context *cmd, const char *name, struct d
4d51e5
 	return dev;
4d51e5
 }
4d51e5
 
4d51e5
-struct device *dev_cache_get_by_devt(struct cmd_context *cmd, dev_t dev, struct dev_filter *f, int *filtered)
4d51e5
+struct device *dev_cache_get_by_devt(struct cmd_context *cmd, dev_t devt)
4d51e5
 {
4d51e5
-	char path[PATH_MAX];
4d51e5
-	const char *sysfs_dir;
4d51e5
-	struct stat info;
4d51e5
-	struct device *d = (struct device *) btree_lookup(_cache.devices, (uint32_t) dev);
4d51e5
-	int ret;
4d51e5
-
4d51e5
-	if (filtered)
4d51e5
-		*filtered = 0;
4d51e5
-
4d51e5
-	if (!d) {
4d51e5
-		sysfs_dir = dm_sysfs_dir();
4d51e5
-		if (sysfs_dir && *sysfs_dir) {
4d51e5
-			/* First check if dev is sysfs to avoid useless scan */
4d51e5
-			if (dm_snprintf(path, sizeof(path), "%sdev/block/%d:%d",
4d51e5
-					sysfs_dir, (int)MAJOR(dev), (int)MINOR(dev)) < 0) {
4d51e5
-				log_error("dm_snprintf partition failed.");
4d51e5
-				return NULL;
4d51e5
-			}
4d51e5
-
4d51e5
-			if (lstat(path, &info)) {
4d51e5
-				log_debug("No sysfs entry for %d:%d errno %d at %s.",
4d51e5
-					  (int)MAJOR(dev), (int)MINOR(dev), errno, path);
4d51e5
-				return NULL;
4d51e5
-			}
4d51e5
-		}
4d51e5
-
4d51e5
-		log_debug_devs("Device num not found in dev_cache repeat dev_cache_scan for %d:%d",
4d51e5
-				(int)MAJOR(dev), (int)MINOR(dev));
4d51e5
-		dev_cache_scan(cmd);
4d51e5
-		d = (struct device *) btree_lookup(_cache.devices, (uint32_t) dev);
4d51e5
-
4d51e5
-		if (!d)
4d51e5
-			return NULL;
4d51e5
-	}
4d51e5
-
4d51e5
-	if (d->flags & DEV_REGULAR)
4d51e5
-		return d;
4d51e5
-
4d51e5
-	if (!f)
4d51e5
-		return d;
4d51e5
-
4d51e5
-	ret = f->passes_filter(cmd, f, d, NULL);
4d51e5
-
4d51e5
-	if (ret == -EAGAIN) {
4d51e5
-		log_debug_devs("get device by number defer filter %s", dev_name(d));
4d51e5
-		d->flags |= DEV_FILTER_AFTER_SCAN;
4d51e5
-		ret = 1;
4d51e5
-	}
4d51e5
-
4d51e5
-	if (ret)
4d51e5
-		return d;
4d51e5
-
4d51e5
-	if (filtered)
4d51e5
-		*filtered = 1;
4d51e5
+	struct device *dev = (struct device *) btree_lookup(_cache.devices, (uint32_t) devt);
4d51e5
 
4d51e5
+	if (dev)
4d51e5
+		return dev;
4d51e5
+	log_debug_devs("No devno %d:%d in dev cache.", (int)MAJOR(devt), (int)MINOR(devt));
4d51e5
 	return NULL;
4d51e5
 }
4d51e5
 
4d51e5
diff --git a/lib/device/dev-cache.h b/lib/device/dev-cache.h
4d51e5
index 635dc4fc9..7305eeb0e 100644
4d51e5
--- a/lib/device/dev-cache.h
4d51e5
+++ b/lib/device/dev-cache.h
4d51e5
@@ -54,7 +54,7 @@ int dev_cache_has_scanned(void);
4d51e5
 int dev_cache_add_dir(const char *path);
4d51e5
 struct device *dev_cache_get(struct cmd_context *cmd, const char *name, struct dev_filter *f);
4d51e5
 
4d51e5
-struct device *dev_cache_get_by_devt(struct cmd_context *cmd, dev_t device, struct dev_filter *f, int *filtered);
4d51e5
+struct device *dev_cache_get_by_devt(struct cmd_context *cmd, dev_t devt);
4d51e5
 
4d51e5
 struct device *dev_hash_get(const char *name);
4d51e5
 
4d51e5
diff --git a/lib/label/label.c b/lib/label/label.c
4d51e5
index 354ab35e2..ffe925254 100644
4d51e5
--- a/lib/label/label.c
4d51e5
+++ b/lib/label/label.c
4d51e5
@@ -1443,7 +1443,7 @@ void label_scan_invalidate_lv(struct cmd_context *cmd, struct logical_volume *lv
4d51e5
 	if (lv_info(cmd, lv, 0, &lvinfo, 0, 0) && lvinfo.exists) {
4d51e5
 		/* FIXME: Still unclear what is it supposed to find */
4d51e5
 		devt = MKDEV(lvinfo.major, lvinfo.minor);
4d51e5
-		if ((dev = dev_cache_get_by_devt(cmd, devt, NULL, NULL)))
4d51e5
+		if ((dev = dev_cache_get_by_devt(cmd, devt)))
4d51e5
 			label_scan_invalidate(dev);
4d51e5
 	}
4d51e5
 }
4d51e5
diff --git a/tools/pvscan.c b/tools/pvscan.c
4d51e5
index f60c4a2ca..160a2c9a0 100644
4d51e5
--- a/tools/pvscan.c
4d51e5
+++ b/tools/pvscan.c
4d51e5
@@ -857,7 +857,7 @@ static int _get_devs_from_saved_vg(struct cmd_context *cmd, const char *vgname,
4d51e5
 
4d51e5
 		devno = MKDEV(file_major, file_minor);
4d51e5
 
4d51e5
-		if (!(dev = dev_cache_get_by_devt(cmd, devno, NULL, NULL))) {
4d51e5
+		if (!(dev = dev_cache_get_by_devt(cmd, devno))) {
4d51e5
 			log_error_pvscan(cmd, "No device found for %d:%d PVID %s", file_major, file_minor, pvid);
4d51e5
 			goto bad;
4d51e5
 		}
4d51e5
@@ -1195,7 +1195,7 @@ static int _get_args_devs(struct cmd_context *cmd, struct dm_list *pvscan_args,
4d51e5
 		if (arg->devname)
4d51e5
 			arg->dev = dev_cache_get(cmd, arg->devname, NULL);
4d51e5
 		else if (arg->devno)
4d51e5
-			arg->dev = dev_cache_get_by_devt(cmd, arg->devno, NULL, NULL);
4d51e5
+			arg->dev = dev_cache_get_by_devt(cmd, arg->devno);
4d51e5
 		else
4d51e5
 			return_0;
4d51e5
 	}
4d51e5
@@ -1257,7 +1257,7 @@ static void _set_pv_devices_online(struct cmd_context *cmd, struct volume_group
4d51e5
 
4d51e5
 		devno = MKDEV(major, minor);
4d51e5
 
4d51e5
-		if (!(dev = dev_cache_get_by_devt(cmd, devno, NULL, NULL))) {
4d51e5
+		if (!(dev = dev_cache_get_by_devt(cmd, devno))) {
4d51e5
 			log_print_pvscan(cmd, "VG %s PV %s no device found for %d:%d",
4d51e5
 					 vg->name, pvid, major, minor);
4d51e5
 			pvl->pv->status |= MISSING_PV;
4d51e5
-- 
4d51e5
2.34.3
4d51e5