]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Ignore missing files on pool refresh
authorJán Tomko <jtomko@redhat.com>
Thu, 20 Mar 2014 15:35:00 +0000 (16:35 +0100)
committerJán Tomko <jtomko@redhat.com>
Thu, 20 Mar 2014 17:13:58 +0000 (18:13 +0100)
If we cannot stat/open a file on pool refresh, returning -1 aborts
the refresh and the pool is undefined.

Only treat missing files as fatal unless VolOpenCheckMode is called
with the VIR_STORAGE_VOL_OPEN_ERROR flag. If this flag is missing
(when it's called from virStorageBackendProbeTarget in
virStorageBackendFileSystemRefresh), only emit a warning and return
-2 to let the caller skip over the file.

https://bugzilla.redhat.com/show_bug.cgi?id=977706

src/storage/storage_backend.c

index b1421ecf5f2cadb4c0d3a4a6e3fe38d7e3f90e9a..e759ad62d3650200beb6c214b9fa03865001ea6f 100644 (file)
@@ -1212,6 +1212,10 @@ virStorageBackendVolOpenCheckMode(const char *path, struct stat *sb,
     char *base = last_component(path);
 
     if (lstat(path, sb) < 0) {
+        if (errno == ENOENT && !(flags & VIR_STORAGE_VOL_OPEN_ERROR)) {
+            VIR_WARN("ignoring missing file '%s'", path);
+            return -2;
+        }
         virReportSystemError(errno,
                              _("cannot stat file '%s'"),
                              path);
@@ -1238,6 +1242,10 @@ virStorageBackendVolOpenCheckMode(const char *path, struct stat *sb,
             VIR_WARN("ignoring dangling symlink '%s'", path);
             return -2;
         }
+        if (errno == ENOENT && !(flags & VIR_STORAGE_VOL_OPEN_ERROR)) {
+            VIR_WARN("ignoring missing file '%s'", path);
+            return -2;
+        }
 
         virReportSystemError(errno,
                              _("cannot open volume '%s'"),