qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH RESEND 39/50] blockdev: Add blockdev-close-tray


From: Max Reitz
Subject: [Qemu-devel] [PATCH RESEND 39/50] blockdev: Add blockdev-close-tray
Date: Tue, 27 Jan 2015 14:46:12 -0500

Signed-off-by: Max Reitz <address@hidden>
---
 blockdev.c           | 22 ++++++++++++++++++++++
 qapi/block-core.json | 14 ++++++++++++++
 qmp-commands.hx      | 33 +++++++++++++++++++++++++++++++++
 3 files changed, 69 insertions(+)

diff --git a/blockdev.c b/blockdev.c
index a0b9f17..d6a3fdf 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2041,6 +2041,28 @@ out:
     }
 }
 
+void qmp_blockdev_close_tray(const char *device, Error **errp)
+{
+    BlockBackend *blk;
+
+    blk = blk_by_name(device);
+    if (!blk) {
+        error_set(errp, QERR_DEVICE_NOT_FOUND, device);
+        return;
+    }
+
+    if (!blk_dev_has_removable_media(blk)) {
+        error_setg(errp, "Device '%s' is not removable", device);
+        return;
+    }
+
+    if (!blk_dev_is_tray_open(blk)) {
+        return;
+    }
+
+    blk_dev_change_media_cb(blk, true);
+}
+
 /* throttling disk I/O limits */
 void qmp_block_set_io_throttle(const char *device, int64_t bps, int64_t bps_rd,
                                int64_t bps_wr,
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 029f08b..802734a 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1739,6 +1739,20 @@
   'data': { 'device': 'str',
             '*force': 'bool' } }
 
+##
+# @blockdev-close-tray:
+#
+# Closes a block device's tray. If there is a block driver state tree 
associated
+# with the block device (which is currently ejected), that tree will be loaded
+# as the medium.
+#
+# @device: block device name
+#
+# Since: 2.3
+##
+{ 'command': 'blockdev-close-tray',
+  'data': { 'device': 'str' } }
+
 
 ##
 # @BlockErrorAction
diff --git a/qmp-commands.hx b/qmp-commands.hx
index cfa1b98..5927507 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -3678,6 +3678,39 @@ Example (1):
 EQMP
 
     {
+        .name       = "blockdev-close-tray",
+        .args_type  = "device:s",
+        .mhandler.cmd_new = qmp_marshal_input_blockdev_close_tray,
+    },
+
+SQMP
+blockdev-close-tray
+-------------------
+
+Closes a block device's tray. If there is a block driver state tree associated
+with the block device (which is currently ejected), that tree will be loaded as
+the medium.
+
+Arguments:
+
+- "device": block device name (json-string)
+
+Example (1):
+
+-> { "execute": "blockdev-close-tray",
+     "arguments": { "device": "ide1-cd0" } }
+
+<- { "timestamp": { "seconds": 1418751345,
+                    "microseconds": 272147 },
+     "event": "DEVICE_TRAY_MOVED",
+     "data": { "device": "ide1-cd0",
+               "tray-open": false } }
+
+<- { "return": {} }
+
+EQMP
+
+    {
         .name       = "query-named-block-nodes",
         .args_type  = "",
         .mhandler.cmd_new = qmp_marshal_input_query_named_block_nodes,
-- 
2.1.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]