mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 21:34:54 +03:00
storage: Extract error reporting for broken chains
Simplify reporting the error if backing chain is broken for further callers by extracting it into a separate function.
This commit is contained in:
parent
a93d750a7e
commit
b4daf6af9a
@ -404,6 +404,38 @@ virStorageFileChown(const virStorageSource *src,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virStorageFileReportBrokenChain:
|
||||||
|
*
|
||||||
|
* @errcode: errno when accessing @src
|
||||||
|
* @src: inaccessible file in the backing chain of @parent
|
||||||
|
* @parent: root virStorageSource being checked
|
||||||
|
*
|
||||||
|
* Reports the correct error message if @src is missing in the backing chain
|
||||||
|
* for @parent.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
virStorageFileReportBrokenChain(int errcode,
|
||||||
|
virStorageSourcePtr src,
|
||||||
|
virStorageSourcePtr parent)
|
||||||
|
{
|
||||||
|
unsigned int access_user = src->drv->uid;
|
||||||
|
unsigned int access_group = src->drv->gid;
|
||||||
|
|
||||||
|
if (src == parent) {
|
||||||
|
virReportSystemError(errcode,
|
||||||
|
_("Cannot access storage file '%s' "
|
||||||
|
"(as uid:%u, gid:%u)"),
|
||||||
|
src->path, access_user, access_group);
|
||||||
|
} else {
|
||||||
|
virReportSystemError(errcode,
|
||||||
|
_("Cannot access backing file '%s' "
|
||||||
|
"of storage file '%s' (as uid:%u, gid:%u)"),
|
||||||
|
src->path, parent->path, access_user, access_group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Recursive workhorse for virStorageFileGetMetadata. */
|
/* Recursive workhorse for virStorageFileGetMetadata. */
|
||||||
static int
|
static int
|
||||||
virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
|
virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
|
||||||
@ -433,20 +465,7 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (virStorageFileAccess(src, F_OK) < 0) {
|
if (virStorageFileAccess(src, F_OK) < 0) {
|
||||||
if (src == parent) {
|
virStorageFileReportBrokenChain(errno, src, parent);
|
||||||
virReportSystemError(errno,
|
|
||||||
_("Cannot access storage file '%s' "
|
|
||||||
"(as uid:%u, gid:%u)"),
|
|
||||||
src->path, (unsigned int)uid,
|
|
||||||
(unsigned int)gid);
|
|
||||||
} else {
|
|
||||||
virReportSystemError(errno,
|
|
||||||
_("Cannot access backing file '%s' "
|
|
||||||
"of storage file '%s' (as uid:%u, gid:%u)"),
|
|
||||||
src->path, parent->path,
|
|
||||||
(unsigned int)uid, (unsigned int)gid);
|
|
||||||
}
|
|
||||||
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,4 +52,8 @@ int virStorageFileGetMetadata(virStorageSourcePtr src,
|
|||||||
char *virStorageFileGetBackingStoreStr(virStorageSourcePtr src)
|
char *virStorageFileGetBackingStoreStr(virStorageSourcePtr src)
|
||||||
ATTRIBUTE_NONNULL(1);
|
ATTRIBUTE_NONNULL(1);
|
||||||
|
|
||||||
|
void virStorageFileReportBrokenChain(int errcode,
|
||||||
|
virStorageSourcePtr src,
|
||||||
|
virStorageSourcePtr parent);
|
||||||
|
|
||||||
#endif /* __VIR_STORAGE_SOURCE_H__ */
|
#endif /* __VIR_STORAGE_SOURCE_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user