]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virNumaGetPages: Don't fail on huge page-less systems
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 23 Jun 2014 13:46:31 +0000 (15:46 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 24 Jun 2014 09:50:32 +0000 (11:50 +0200)
If we are running on a system that is not capable of huge pages (e.g.
because the kernel is not configured that way) we still try to open
"/sys/kernel/mm/hugepages/" which however does not exist. We should
be tolerant to this specific use case.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/util/virnuma.c

index 66d228181bf72575dc1bea3f0100aecfaef7bf2d..207b8043f5b231ae9bcad76dccb7cbb6e2f5006b 100644 (file)
@@ -738,7 +738,7 @@ virNumaGetPages(int node,
     int ret = -1;
     char *path = NULL;
     DIR *dir = NULL;
-    int direrr;
+    int direrr = 0;
     struct dirent *entry;
     unsigned int *tmp_size = NULL, *tmp_avail = NULL, *tmp_free = NULL;
     unsigned int ntmp = 0;
@@ -760,13 +760,17 @@ virNumaGetPages(int node,
         goto cleanup;
 
     if (!(dir = opendir(path))) {
-        virReportSystemError(errno,
-                             _("unable to open path: %s"),
-                             path);
-        goto cleanup;
+        /* It's okay if the @path doesn't exist. Maybe we are running on
+         * system without huge pages support where the path may not exist. */
+        if (errno != ENOENT) {
+            virReportSystemError(errno,
+                                 _("unable to open path: %s"),
+                                 path);
+            goto cleanup;
+        }
     }
 
-    while ((direrr = virDirRead(dir, &entry, path)) > 0) {
+    while (dir && (direrr = virDirRead(dir, &entry, path)) > 0) {
         const char *page_name = entry->d_name;
         unsigned int page_size, page_avail = 0, page_free = 0;
         char *end;