Patchwork Add drive_add/drive_del to qmp_commands.hx

login
register
mail settings
Submitter Hu Tao
Date Feb. 17, 2011, 8:57 a.m.
Message ID <20110217085748.GA22623@localhost.localdomain>
Download mbox | patch
Permalink /patch/83428/
State New
Headers show

Comments

Hu Tao - Feb. 17, 2011, 8:57 a.m.
This patch enables drive_add/drive_del qmp commands, which are required
by libvirt when connecting to qemu using QMP.

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 qmp-commands.hx |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 59 insertions(+), 0 deletions(-)
Anthony Liguori - Feb. 17, 2011, 12:09 p.m.
On 02/17/2011 02:57 AM, Hu Tao wrote:
> This patch enables drive_add/drive_del qmp commands, which are required
> by libvirt when connecting to qemu using QMP.
>
> Signed-off-by: Hu Tao<hutao@cn.fujitsu.com>
> ---
>   qmp-commands.hx |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>   1 files changed, 59 insertions(+), 0 deletions(-)
>
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index df40a3d..cf1cd13 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -1774,3 +1774,62 @@ Example:
>
>   EQMP
>
> +    {
> +        .name       = "drive_add",
> +        .args_type  = "pci_addr:s,opts:s",
> +        .params     = "[[<domain>:]<bus>:]<slot>\n"
> +                      "[file=file][,if=type][,bus=n]\n"
> +                      "[,unit=m][,media=d][index=i]\n"
> +                      "[,cyls=c,heads=h,secs=s[,trans=t]]\n"
> +                      "[snapshot=on|off][,cache=on|off]",
> +
> +        .help       = "add drive to PCI storage controller",
> +        .mhandler.cmd = drive_hot_add,
> +    },
> +
> +SQMP
> +drive_add
> +---------
> +
> +Add drive to PCI storage controller.
> +
> +Arguments:
> +
> +- "pci_addr": pci address.
> +- "opts": options of the drive to be added.
> +
> +Example:
> +
> +->  { "execute": "drive_add", "arguments": { "pci_addr": "dummy", "opts": "file=/path/to/disk.img, if=none, id=drive-virtio-disk1, format=raw" } }
>    

QMP command should not take encoded arguments.


Regards,

Anthony Liguori

> +<- { "return": {} }
> +
> +EQMP
> +
> +    {
> +        .name       = "drive_del",
> +        .args_type  = "id:s",
> +        .params     = "device",
> +        .help       = "remove host block device",
> +        .user_print = monitor_user_noop,
> +        .mhandler.cmd_new = do_drive_del,
> +    },
> +
> +SQMP
> +drive_del
> +---------
> +
> +Remove host block device.  The result is that guest generated IO is no longer
> +submitted against the host device underlying the disk.  Once a drive has
> +been deleted, the QEMU Block layer returns -EIO which results in IO
> +errors in the guest for applications that are reading/writing to the device.
> +
> +Arguments:
> +
> +- "id": id of device to be removed.
> +
> +Examples:
> +
> +->  { "execute": "drive_del", "arguments": { "id": "drive-virtio-disk1"} }
> +<- { "return": {} }
> +
> +EQMP
>
Markus Armbruster - Feb. 17, 2011, 12:22 p.m.
Hu Tao <hutao@cn.fujitsu.com> writes:

> This patch enables drive_add/drive_del qmp commands, which are required
> by libvirt when connecting to qemu using QMP.

These commands were intentionally left out of QMP because they are badly
designed.

I understand the need for drive hot plug in QMP.  I started to work on
saner commands some time ago, but too many other things took priority.
I still hope to finish the job.

Can you use human monitor passthrough in the meantime?

Patch

diff --git a/qmp-commands.hx b/qmp-commands.hx
index df40a3d..cf1cd13 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -1774,3 +1774,62 @@  Example:
 
 EQMP
 
+    {
+        .name       = "drive_add",
+        .args_type  = "pci_addr:s,opts:s",
+        .params     = "[[<domain>:]<bus>:]<slot>\n"
+                      "[file=file][,if=type][,bus=n]\n"
+                      "[,unit=m][,media=d][index=i]\n"
+                      "[,cyls=c,heads=h,secs=s[,trans=t]]\n"
+                      "[snapshot=on|off][,cache=on|off]",
+
+        .help       = "add drive to PCI storage controller",
+        .mhandler.cmd = drive_hot_add,
+    },
+
+SQMP
+drive_add
+---------
+
+Add drive to PCI storage controller.
+
+Arguments:
+
+- "pci_addr": pci address.
+- "opts": options of the drive to be added.
+
+Example:
+
+-> { "execute": "drive_add", "arguments": { "pci_addr": "dummy", "opts": "file=/path/to/disk.img, if=none, id=drive-virtio-disk1, format=raw" } }
+<- { "return": {} }
+
+EQMP
+
+    {
+        .name       = "drive_del",
+        .args_type  = "id:s",
+        .params     = "device",
+        .help       = "remove host block device",
+        .user_print = monitor_user_noop,
+        .mhandler.cmd_new = do_drive_del,
+    },
+
+SQMP
+drive_del
+---------
+
+Remove host block device.  The result is that guest generated IO is no longer
+submitted against the host device underlying the disk.  Once a drive has
+been deleted, the QEMU Block layer returns -EIO which results in IO
+errors in the guest for applications that are reading/writing to the device.
+
+Arguments:
+
+- "id": id of device to be removed.
+
+Examples:
+
+-> { "execute": "drive_del", "arguments": { "id": "drive-virtio-disk1"} }
+<- { "return": {} }
+
+EQMP