eal: fix plugin directory scan to be filesystem agnostic
authorPanu Matilainen <pmatilai@redhat.com>
Wed, 18 Nov 2015 06:45:23 +0000 (08:45 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 23 Nov 2015 15:51:53 +0000 (16:51 +0100)
Not all filesystems supply struct dirent d_type field, in which case
everything in the specified directory would go ignored. One such
filesystem being XFS which RHEL 7 defaults to... stat() the entries
instead.

Fixes: 9f8eb1d9ca0f ("eal: support driver loading from directory")

Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
lib/librte_eal/common/eal_common_options.c

index a199093..29942ea 100644 (file)
@@ -191,12 +191,14 @@ eal_plugindir_init(const char *path)
        }
 
        while ((dent = readdir(d)) != NULL) {
-               if (dent->d_type != DT_REG && dent->d_type != DT_LNK)
-                       continue;
+               struct stat sb;
 
                snprintf(sopath, PATH_MAX-1, "%s/%s", path, dent->d_name);
                sopath[PATH_MAX-1] = 0;
 
+               if (!(stat(sopath, &sb) == 0 && S_ISREG(sb.st_mode)))
+                       continue;
+
                if (eal_plugin_add(sopath) == -1)
                        break;
        }