On 04/06/2012 01:13 AM, Paolo Bonzini wrote: > Il 06/04/2012 06:36, Eric Blake ha scritto: >> +int >> +qemuMonitorJSONDriveMirror(qemuMonitorPtr mon ATTRIBUTE_UNUSED, >> + virJSONValuePtr actions, >> + const char *device, const char *file, >> + const char *format, int mode) >> +{ >> + int ret = -1; >> + virJSONValuePtr cmd; >> + >> + cmd = qemuMonitorJSONMakeCommandRaw(true, >> + "drive-mirror", >> + "s:device", device, >> + "s:target", file, >> + "s:format", format, >> + "s:mode", >> + qemuMonitorDriveMirrorTypeToString(mode), >> + NULL); >> + if (!cmd) >> + return -1; >> + >> + if (virJSONValueArrayAppend(actions, cmd) < 0) { >> + virReportOOMError(); >> + goto cleanup; >> + } > > Here it would be nice to invoke the command directly if actions is NULL. > Right now there is no certainty that drive-mirror will be > transactionable in upstream QEMU, so it is safer to invoke it outside a > transaction in patch 11. Good idea; borrowing from qemuMonitorJSONDiskSnapshot, I'm going to squash this in: diff --git i/src/qemu/qemu_monitor_json.c w/src/qemu/qemu_monitor_json.c index 3bbc664..ad9b8b8 100644 --- i/src/qemu/qemu_monitor_json.c +++ w/src/qemu/qemu_monitor_json.c @@ -3144,7 +3144,7 @@ qemuMonitorJSONDiskSnapshot(qemuMonitorPtr mon, virJSONValuePtr actions, const char *device, const char *file, const char *format, bool reuse) { - int ret; + int ret = -1; virJSONValuePtr cmd; virJSONValuePtr reply = NULL; @@ -3162,14 +3162,13 @@ qemuMonitorJSONDiskSnapshot(qemuMonitorPtr mon, virJSONValuePtr actions, if (actions) { if (virJSONValueArrayAppend(actions, cmd) < 0) { virReportOOMError(); - ret = -1; } else { ret = 0; cmd = NULL; } } else { if ((ret = qemuMonitorJSONCommand(mon, cmd, &reply)) < 0) - goto cleanup; + goto cleanup; if (qemuMonitorJSONHasError(reply, "CommandNotFound") && qemuMonitorCheckHMP(mon, "snapshot_blkdev")) { @@ -3199,8 +3198,9 @@ qemuMonitorJSONDriveMirror(qemuMonitorPtr mon ATTRIBUTE_UNUSED, { int ret = -1; virJSONValuePtr cmd; + virJSONValuePtr reply = NULL; - cmd = qemuMonitorJSONMakeCommandRaw(true, + cmd = qemuMonitorJSONMakeCommandRaw(actions != NULL, "drive-mirror", "s:device", device, "s:target", file, @@ -3211,16 +3211,22 @@ qemuMonitorJSONDriveMirror(qemuMonitorPtr mon ATTRIBUTE_UNUSED, if (!cmd) return -1; - if (virJSONValueArrayAppend(actions, cmd) < 0) { - virReportOOMError(); - goto cleanup; + if (actions) { + if (virJSONValueArrayAppend(actions, cmd) < 0) { + virReportOOMError(); + } else { + cmd = NULL; + ret = 0; + } + } else { + if ((ret = qemuMonitorJSONCommand(mon, cmd, &reply)) < 0) + goto cleanup; + ret = qemuMonitorJSONCheckError(cmd, reply); } - cmd = NULL; - ret = 0; - cleanup: virJSONValueFree(cmd); + virJSONValueFree(reply); return ret; } -- Eric Blake eblake@xxxxxxxxxx +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list