[lvm-devel] main - dev-type: use fopen for sysfs file

Zdenek Kabelac zkabelac at sourceware.org
Mon Feb 8 22:45:11 UTC 2021


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=3bf2ca11d9ce4ce205a98828ec4bfe8169c33403
Commit:        3bf2ca11d9ce4ce205a98828ec4bfe8169c33403
Parent:        e429e69b6593fa688727fb632d7050f05cd27317
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Sun Feb 7 14:07:17 2021 +0100
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Mon Feb 8 23:43:38 2021 +0100

dev-type: use fopen for sysfs file

Directly open sysfs files and save extra stat() call which
is not adding any extra safety in sysfs dir.
---
 lib/device/dev-type.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/lib/device/dev-type.c b/lib/device/dev-type.c
index dca81d8d1..c9f12d793 100644
--- a/lib/device/dev-type.c
+++ b/lib/device/dev-type.c
@@ -944,8 +944,7 @@ static unsigned long _dev_topology_attribute(struct dev_types *dt,
 	const char *sysfs_dir = dm_sysfs_dir();
 	char path[PATH_MAX], buffer[64];
 	FILE *fp;
-	struct stat info;
-	dev_t uninitialized_var(primary);
+	dev_t primary = 0;
 	unsigned long result = default_value;
 	unsigned long value = 0UL;
 
@@ -963,9 +962,9 @@ static unsigned long _dev_topology_attribute(struct dev_types *dt,
 	 * - if not: either the kernel doesn't have topology support
 	 *   or the device could be a partition
 	 */
-	if (stat(path, &info) == -1) {
+	if (!(fp = fopen(path, "r"))) {
 		if (errno != ENOENT) {
-			log_sys_debug("stat", path);
+			log_sys_debug("fopen", path);
 			goto out;
 		}
 		if (!dev_get_primary_dev(dt, dev, &primary))
@@ -975,25 +974,20 @@ static unsigned long _dev_topology_attribute(struct dev_types *dt,
 		if (!_snprintf_attr(path, sizeof(path), sysfs_dir, attribute, primary))
 			goto_out;
 
-		if (stat(path, &info) == -1) {
+		if (!(fp = fopen(path, "r"))) {
 			if (errno != ENOENT)
-				log_sys_debug("stat", path);
+				log_sys_debug("fopen", path);
 			goto out;
 		}
 	}
 
-	if (!(fp = fopen(path, "r"))) {
-		log_sys_debug("fopen", path);
-		goto out;
-	}
-
 	if (!fgets(buffer, sizeof(buffer), fp)) {
 		log_sys_debug("fgets", path);
 		goto out_close;
 	}
 
 	if (sscanf(buffer, "%lu", &value) != 1) {
-		log_warn("sysfs file %s not in expected format: %s", path, buffer);
+		log_warn("WARNING: sysfs file %s not in expected format: %s", path, buffer);
 		goto out_close;
 	}
 




More information about the lvm-devel mailing list