Commit fbe2d816 authored by Kevin Wolf's avatar Kevin Wolf
Browse files

block: Accept device model name for eject



In order to remove the need for BlockBackend names in the external API,
we want to allow qdev device names in all device related commands.

This converts eject to accept a qdev device name.

Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 00949bab
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -2265,7 +2265,9 @@ exit:
    block_job_txn_unref(block_job_txn);
}

void qmp_eject(const char *device, bool has_force, bool force, Error **errp)
void qmp_eject(bool has_device, const char *device,
               bool has_id, const char *id,
               bool has_force, bool force, Error **errp)
{
    Error *local_err = NULL;
    int rc;
@@ -2274,14 +2276,16 @@ void qmp_eject(const char *device, bool has_force, bool force, Error **errp)
        force = false;
    }

    rc = do_open_tray(device, NULL, force, &local_err);
    rc = do_open_tray(has_device ? device : NULL,
                      has_id ? id : NULL,
                      force, &local_err);
    if (rc && rc != -ENOSYS) {
        error_propagate(errp, local_err);
        return;
    }
    error_free(local_err);

    qmp_x_blockdev_remove_medium(true, device, false, NULL, errp);
    qmp_x_blockdev_remove_medium(has_device, device, has_id, id, errp);
}

void qmp_block_passwd(bool has_device, const char *device,
+5 −3
Original line number Diff line number Diff line
@@ -72,12 +72,14 @@ Eject a removable medium.

Arguments:

- force: force ejection (json-bool, optional)
- device: device name (json-string)
- "force": force ejection (json-bool, optional)
- "device": block device name (deprecated, use @id instead)
            (json-string, optional)
- "id": the name or QOM path of the guest device (json-string, optional)

Example:

-> { "execute": "eject", "arguments": { "device": "ide1-cd0" } }
-> { "execute": "eject", "arguments": { "id": "ide0-1-0" } }
<- { "return": {} }

Note: The "force" argument defaults to false.
+1 −1
Original line number Diff line number Diff line
@@ -1376,7 +1376,7 @@ void hmp_eject(Monitor *mon, const QDict *qdict)
    const char *device = qdict_get_str(qdict, "device");
    Error *err = NULL;

    qmp_eject(device, true, force, &err);
    qmp_eject(true, device, false, NULL, true, force, &err);
    hmp_handle_error(mon, &err);
}

+7 −2
Original line number Diff line number Diff line
@@ -125,7 +125,9 @@
#
# Ejects a device from a removable drive.
#
# @device:  The name of the device
# @device:  #optional Block device name (deprecated, use @id instead)
#
# @id:      #optional The name or QOM path of the guest device (since: 2.8)
#
# @force:   @optional If true, eject regardless of whether the drive is locked.
#           If not specified, the default value is false.
@@ -137,7 +139,10 @@
#
# Since: 0.14.0
##
{ 'command': 'eject', 'data': {'device': 'str', '*force': 'bool'} }
{ 'command': 'eject',
  'data': { '*device': 'str',
            '*id': 'str',
            '*force': 'bool' } }

##
# @nbd-server-start:
+2 −1
Original line number Diff line number Diff line
@@ -1085,7 +1085,8 @@ QemuCocoaView *cocoaView;
    }

    Error *err = NULL;
    qmp_eject([drive cStringUsingEncoding: NSASCIIStringEncoding], false, false, &err);
    qmp_eject(true, [drive cStringUsingEncoding: NSASCIIStringEncoding],
              false, NULL, false, false, &err);
    handleAnyDeviceErrors(err);
}