mirror of https://gitee.com/openkylin/libvirt.git
qemu: snapshot: Restrict file existence check only for local storage
Soon we'll allow more protocols and storage types with snapshots where we in some cases can't check whether the storage already exists. Restrict the sanity checks whether the destination images exist or not for local storage where it's easy. For any other case we will fail later. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
7921e9b088
commit
9d80fdcd63
|
@ -15008,32 +15008,34 @@ qemuDomainSnapshotPrepareDiskExternal(virDomainDiskDefPtr disk,
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (virStorageFileInit(snapdisk->src) < 0)
|
||||
return -1;
|
||||
|
||||
rc = virStorageFileStat(snapdisk->src, &st);
|
||||
err = errno;
|
||||
|
||||
virStorageFileDeinit(snapdisk->src);
|
||||
|
||||
if (rc < 0) {
|
||||
if (err != ENOENT) {
|
||||
virReportSystemError(err,
|
||||
_("unable to stat for disk %s: %s"),
|
||||
snapdisk->name, snapdisk->src->path);
|
||||
if (virStorageSourceIsLocalStorage(snapdisk->src)) {
|
||||
if (virStorageFileInit(snapdisk->src) < 0)
|
||||
return -1;
|
||||
} else if (reuse) {
|
||||
virReportSystemError(err,
|
||||
_("missing existing file for disk %s: %s"),
|
||||
snapdisk->name, snapdisk->src->path);
|
||||
|
||||
rc = virStorageFileStat(snapdisk->src, &st);
|
||||
err = errno;
|
||||
|
||||
virStorageFileDeinit(snapdisk->src);
|
||||
|
||||
if (rc < 0) {
|
||||
if (err != ENOENT) {
|
||||
virReportSystemError(err,
|
||||
_("unable to stat for disk %s: %s"),
|
||||
snapdisk->name, snapdisk->src->path);
|
||||
return -1;
|
||||
} else if (reuse) {
|
||||
virReportSystemError(err,
|
||||
_("missing existing file for disk %s: %s"),
|
||||
snapdisk->name, snapdisk->src->path);
|
||||
return -1;
|
||||
}
|
||||
} else if (!S_ISBLK(st.st_mode) && st.st_size && !reuse) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("external snapshot file for disk %s already "
|
||||
"exists and is not a block device: %s"),
|
||||
snapdisk->name, snapdisk->src->path);
|
||||
return -1;
|
||||
}
|
||||
} else if (!S_ISBLK(st.st_mode) && st.st_size && !reuse) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("external snapshot file for disk %s already "
|
||||
"exists and is not a block device: %s"),
|
||||
snapdisk->name, snapdisk->src->path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue