[libvirt] [PATCH] qemu: fallback to HMP drive_add/drive_del

Wen Congyang wency at cn.fujitsu.com
Fri Mar 11 01:49:02 UTC 2011


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 at cn.fujitsu.com>
> 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:




More information about the libvir-list mailing list