mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
qemuMigrationSrcIsSafe: Check local storage more thoroughly
https://bugzilla.redhat.com/show_bug.cgi?id=1494454 If a domain disk is stored on local filesystem (e.g. ext4) but is not being migrated it is very likely that domain is not able to run on destination. Regardless of share/cache mode. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
ef71caeaa8
commit
ed11e9cd95
@ -1215,25 +1215,26 @@ qemuMigrationSrcIsSafe(virDomainDefPtr def,
|
||||
virDomainDiskDefPtr disk = def->disks[i];
|
||||
const char *src = virDomainDiskGetSource(disk);
|
||||
|
||||
/* Our code elsewhere guarantees shared disks are either readonly (in
|
||||
* which case cache mode doesn't matter) or used with cache=none or used with cache=directsync */
|
||||
/* Disks without any source (i.e. floppies and CD-ROMs)
|
||||
* OR readonly are safe. */
|
||||
if (virStorageSourceIsEmpty(disk->src) ||
|
||||
disk->src->readonly ||
|
||||
disk->src->shared ||
|
||||
disk->cachemode == VIR_DOMAIN_DISK_CACHE_DISABLE ||
|
||||
disk->cachemode == VIR_DOMAIN_DISK_CACHE_DIRECTSYNC)
|
||||
disk->src->readonly)
|
||||
continue;
|
||||
|
||||
/* disks which are migrated by qemu are safe too */
|
||||
/* Disks which are migrated by qemu are safe too. */
|
||||
if (storagemigration &&
|
||||
qemuMigrationAnyCopyDisk(disk, nmigrate_disks, migrate_disks))
|
||||
continue;
|
||||
|
||||
/* However, disks on local FS (e.g. ext4) are not safe. */
|
||||
if (virDomainDiskGetType(disk) == VIR_STORAGE_TYPE_FILE) {
|
||||
if ((rc = virFileIsSharedFS(src)) < 0)
|
||||
if ((rc = virFileIsSharedFS(src)) < 0) {
|
||||
return false;
|
||||
else if (rc == 0)
|
||||
continue;
|
||||
} else if (rc == 0) {
|
||||
virReportError(VIR_ERR_MIGRATE_UNSAFE, "%s",
|
||||
_("Migration without shared storage is unsafe"));
|
||||
return false;
|
||||
}
|
||||
if ((rc = virStorageFileIsClusterFS(src)) < 0)
|
||||
return false;
|
||||
else if (rc == 1)
|
||||
@ -1243,6 +1244,13 @@ qemuMigrationSrcIsSafe(virDomainDefPtr def,
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Our code elsewhere guarantees shared disks are either readonly (in
|
||||
* which case cache mode doesn't matter) or used with cache=none or used with cache=directsync */
|
||||
if (disk->src->shared ||
|
||||
disk->cachemode == VIR_DOMAIN_DISK_CACHE_DISABLE ||
|
||||
disk->cachemode == VIR_DOMAIN_DISK_CACHE_DIRECTSYNC)
|
||||
continue;
|
||||
|
||||
virReportError(VIR_ERR_MIGRATE_UNSAFE, "%s",
|
||||
_("Migration may lead to data corruption if disks"
|
||||
" use cache != none or cache != directsync"));
|
||||
|
Loading…
Reference in New Issue
Block a user