]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: Improve error message when traversing backing chains
authorPeter Krempa <pkrempa@redhat.com>
Thu, 11 Sep 2014 17:09:48 +0000 (19:09 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 24 Sep 2014 08:19:13 +0000 (10:19 +0200)
Report also the name of the parent file and uid/gid used to access it to
help debugging broken storage configurations.

src/storage/storage_driver.c

index c3b29c4916d06bfed13885fb2ac2dfdfae2bfb8b..7c518bfa788f0ed83493768d992025a55ae43e3b 100644 (file)
@@ -2781,6 +2781,7 @@ virStorageFileChown(virStorageSourcePtr src,
 /* Recursive workhorse for virStorageFileGetMetadata.  */
 static int
 virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
+                                 virStorageSourcePtr parent,
                                  uid_t uid, gid_t gid,
                                  bool allow_probe,
                                  bool report_broken,
@@ -2805,9 +2806,18 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
         return -1;
 
     if (virStorageFileAccess(src, F_OK) < 0) {
-        virReportSystemError(errno,
-                             _("Cannot access backing file %s"),
-                             src->path);
+        if (src == parent) {
+            virReportSystemError(errno,
+                                 _("Cannot access storage file '%s' "
+                                   "(as uid:%d, gid:%d)"),
+                                 src->path, (int)uid, (int)gid);
+        } else {
+            virReportSystemError(errno,
+                                 _("Cannot access backing file '%s' "
+                                   "of storage file '%s' (as uid:%d, gid:%d)"),
+                                 src->path, parent->path, (int)uid, (int)gid);
+        }
+
         goto cleanup;
     }
 
@@ -2848,7 +2858,7 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
     else
         backingStore->format = backingFormat;
 
-    if ((ret = virStorageFileGetMetadataRecurse(backingStore,
+    if ((ret = virStorageFileGetMetadataRecurse(backingStore, parent,
                                                 uid, gid,
                                                 allow_probe, report_broken,
                                                 cycle)) < 0) {
@@ -2912,7 +2922,7 @@ virStorageFileGetMetadata(virStorageSourcePtr src,
     if (src->format <= VIR_STORAGE_FILE_NONE)
         src->format = allow_probe ? VIR_STORAGE_FILE_AUTO : VIR_STORAGE_FILE_RAW;
 
-    ret = virStorageFileGetMetadataRecurse(src, uid, gid,
+    ret = virStorageFileGetMetadataRecurse(src, src, uid, gid,
                                            allow_probe, report_broken, cycle);
 
     virHashFree(cycle);