]> sourceware.org Git - lvm2.git/commitdiff
dev-type: use fopen for sysfs file
authorZdenek Kabelac <zkabelac@redhat.com>
Sun, 7 Feb 2021 13:07:17 +0000 (14:07 +0100)
committerZdenek Kabelac <zkabelac@redhat.com>
Mon, 8 Feb 2021 22:43:38 +0000 (23:43 +0100)
Directly open sysfs files and save extra stat() call which
is not adding any extra safety in sysfs dir.

lib/device/dev-type.c

index dca81d8d1da6713f340a12841c57de63a6204233..c9f12d7938d992b261b80f2784161ef49dd6a2ab 100644 (file)
@@ -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;
        }
 
This page took 0.044445 seconds and 5 git commands to generate.