[libvirt PATCH v6 20/30] api: add virNodeDeviceUndefine()
Erik Skultety
eskultet at redhat.com
Wed Mar 31 06:28:39 UTC 2021
On Fri, Mar 26, 2021 at 11:48:16AM -0500, Jonathon Jongsma wrote:
> This interface allows you to undefine a persistently defined (but
> inactive) mediated devices. It is implemented via 'mdevctl'
>
> Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
...
>
>
> +/**
> + * virNodeDeviceUndefine:
> + * @dev: a device object
> + *
> + * Undefine the device object. The virtual device is removed from the host
> + * operating system. This function may require privileged access.
> + *
> + * Returns 0 in case of success and -1 in case of failure.
> + */
> +int
> +virNodeDeviceUndefine(virNodeDevice *dev)
For consistency reasons ^this should remain virNodeDevicePtr
...
>
> +virCommand*
virCommand *
I noticed this pattern repeating across the whole series, some of the
occurrences I commented on (when I noticed), some of them I forgot...so please
fix all of them.
Reviewed-by: Erik Skultety <eskultet at redhat.com>
> +nodeDeviceGetMdevctlUndefineCommand(const char *uuid, char **errmsg)
> +{
> + virCommand *cmd = virCommandNewArgList(MDEVCTL,
> + "undefine",
> + "-u",
> + uuid,
> + NULL);
> + virCommandSetErrorBuffer(cmd, errmsg);
> + return cmd;
> +}
> +
> static int
> virMdevctlStop(virNodeDeviceDefPtr def, char **errmsg)
> {
> @@ -904,6 +916,22 @@ virMdevctlStop(virNodeDeviceDefPtr def, char **errmsg)
> }
>
>
> +static int
> +virMdevctlUndefine(virNodeDeviceDef *def, char **errmsg)
> +{
> + int status;
> + g_autoptr(virCommand) cmd = NULL;
> +
> + cmd = nodeDeviceGetMdevctlUndefineCommand(def->caps->data.mdev.uuid,
> + errmsg);
> +
> + if (virCommandRun(cmd, &status) < 0 || status != 0)
> + return -1;
> +
> + return 0;
> +}
> +
> +
> virCommand*
> nodeDeviceGetMdevctlListCommand(bool defined,
> char **output)
> @@ -1183,6 +1211,51 @@ nodeDeviceDefineXML(virConnect *conn,
> }
>
>
> +int
> +nodeDeviceUndefine(virNodeDevice *device)
> +{
> + int ret = -1;
> + virNodeDeviceObj *obj = NULL;
> + virNodeDeviceDef *def;
> +
> + if (nodeDeviceWaitInit() < 0)
> + return -1;
> +
> + if (!(obj = nodeDeviceObjFindByName(device->name)))
> + return -1;
> +
> + def = virNodeDeviceObjGetDef(obj);
> +
> + if (virNodeDeviceUndefineEnsureACL(device->conn, def) < 0)
> + goto cleanup;
> +
> + if (!virNodeDeviceObjIsPersistent(obj)) {
> + virReportError(VIR_ERR_OPERATION_INVALID,
> + _("Node device '%s' is not defined"),
> + def->name);
> + goto cleanup;
> + }
> +
> + if (nodeDeviceHasCapability(def, VIR_NODE_DEV_CAP_MDEV)) {
> + g_autofree char *errmsg = NULL;
> +
> + if (virMdevctlUndefine(def, &errmsg) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Unable to undefine mediated device: %s"),
> + errmsg && errmsg[0] ? errmsg : "Unknown Error");
"Unknown Error" case which has already been mentioned...
More information about the libvir-list
mailing list