static bool
qemuMigrationSrcIsSafe(virDomainDefPtr def,
+ virQEMUCapsPtr qemuCaps,
size_t nmigrate_disks,
const char **migrate_disks,
unsigned int flags)
disk->cachemode == VIR_DOMAIN_DISK_CACHE_DIRECTSYNC)
continue;
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MIGRATION_FILE_DROP_CACHE)) {
+ VIR_DEBUG("QEMU supports flushing caches; migration is safe");
+ continue;
+ }
+
virReportError(VIR_ERR_MIGRATE_UNSAFE, "%s",
_("Migration may lead to data corruption if disks"
" use cache other than none or directsync"));
goto cleanup;
if (!(flags & (VIR_MIGRATE_UNSAFE | VIR_MIGRATE_OFFLINE)) &&
- !qemuMigrationSrcIsSafe(vm->def, nmigrate_disks, migrate_disks, flags))
+ !qemuMigrationSrcIsSafe(vm->def, priv->qemuCaps,
+ nmigrate_disks, migrate_disks, flags))
goto cleanup;
if (flags & VIR_MIGRATE_POSTCOPY &&
goto endjob;
if (!(flags & (VIR_MIGRATE_UNSAFE | VIR_MIGRATE_OFFLINE)) &&
- !qemuMigrationSrcIsSafe(vm->def, nmigrate_disks, migrate_disks, flags))
+ !qemuMigrationSrcIsSafe(vm->def, priv->qemuCaps,
+ nmigrate_disks, migrate_disks, flags))
goto endjob;
qemuMigrationSrcStoreDomainState(vm);