提交 b4daf6af 编写于 作者: P Peter Krempa

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.
上级 a93d750a
......@@ -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__ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册