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. */
|
||||
static int
|
||||
virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
|
||||
@ -433,20 +465,7 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
|
||||
return -1;
|
||||
|
||||
if (virStorageFileAccess(src, F_OK) < 0) {
|
||||
if (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);
|
||||
}
|
||||
|
||||
virStorageFileReportBrokenChain(errno, src, parent);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
@ -52,4 +52,8 @@ int virStorageFileGetMetadata(virStorageSourcePtr src,
|
||||
char *virStorageFileGetBackingStoreStr(virStorageSourcePtr src)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
|
||||
void virStorageFileReportBrokenChain(int errcode,
|
||||
virStorageSourcePtr src,
|
||||
virStorageSourcePtr parent);
|
||||
|
||||
#endif /* __VIR_STORAGE_SOURCE_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user