At 03/11/2011 09:30 AM, Hu Tao Write: > Here comes the patch:) > >>From c836379e8ad585a718496e3a93638aa999e917d3 Mon Sep 17 00:00:00 2001 > From: Hu Tao <hutao@xxxxxxxxxxxxxx> > Date: Fri, 11 Mar 2011 09:20:06 +0800 > Subject: [PATCH] qemu: fallback to HMP drive_add/drive_del > > fallback to HMP drive_add/drive_del commands if not found in QMP > > --- > src/qemu/qemu_monitor_json.c | 39 +++++++++++++++++++++------------------ > 1 files changed, 21 insertions(+), 18 deletions(-) > > diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c > index d97dc68..c7e94c2 100644 > --- a/src/qemu/qemu_monitor_json.c > +++ b/src/qemu/qemu_monitor_json.c > @@ -2359,11 +2359,18 @@ int qemuMonitorJSONAddDrive(qemuMonitorPtr mon, > if (!cmd) > return -1; > > - ret = qemuMonitorJSONCommand(mon, cmd, &reply); > + if ((ret = qemuMonitorJSONCommand(mon, cmd, &reply) < 0)) > + goto cleanup; > > - if (ret == 0) > - ret = qemuMonitorJSONCheckError(cmd, reply); > + if (qemuMonitorJSONHasError(reply, "CommandNotFound")) { > + VIR_DEBUG0(_("drive_add command not found, trying HMP")); The debug infomation does not need to be translated. > + ret = qemuMonitorTextAddDrive(mon, drivestr); > + goto cleanup; > + } > + > + ret = qemuMonitorJSONCheckError(cmd, reply); > > +cleanup: > virJSONValueFree(cmd); > virJSONValueFree(reply); > return ret; > @@ -2384,22 +2391,18 @@ int qemuMonitorJSONDriveDel(qemuMonitorPtr mon, > if (!cmd) > return -1; > > - ret = qemuMonitorJSONCommand(mon, cmd, &reply); > + if ((ret = qemuMonitorJSONCommand(mon, cmd, &reply)) < 0) > + goto cleanup; > > - if (ret == 0) { > - /* See if drive_del isn't supported */ > - if (qemuMonitorJSONHasError(reply, "CommandNotFound")) { > - VIR_ERROR0(_("deleting disk is not supported. " > - "This may leak data if disk is reassigned")); > - ret = 1; > - goto cleanup; > - } else if (qemuMonitorJSONHasError(reply, "DeviceNotFound")) { > - /* NB: device not found errors mean the drive was > - * auto-deleted and we ignore the error */ > - ret = 0; > - } else { > - ret = qemuMonitorJSONCheckError(cmd, reply); > - } > + if (qemuMonitorJSONHasError(reply, "CommandNotFound")) { > + VIR_DEBUG0(_("drive_del command not found, trying HMP")); the same as the above. > + ret = qemuMonitorTextDriveDel(mon, drivestr); > + } else if (qemuMonitorJSONHasError(reply, "DeviceNotFound")) { > + /* NB: device not found errors mean the drive was > + * auto-deleted and we ignore the error */ > + ret = 0; > + } else { > + ret = qemuMonitorJSONCheckError(cmd, reply); > } > > cleanup: -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list