[libvirt] [PATCH 2/3] virNumaGetPages: Don't fail on huge page-less systems

Michal Privoznik mprivozn at redhat.com
Mon Jun 23 13:59:56 UTC 2014


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 at redhat.com>
---
 src/util/virnuma.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/util/virnuma.c b/src/util/virnuma.c
index a176852..4901378 100644
--- a/src/util/virnuma.c
+++ b/src/util/virnuma.c
@@ -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;
-- 
1.8.5.5




More information about the libvir-list mailing list