[PATCH v3 07/13] ch: add disk attach helper functions

Stefan Kober posted 13 patches 5 months, 1 week ago
[PATCH v3 07/13] ch: add disk attach helper functions
Posted by Stefan Kober 5 months, 1 week ago
On-behalf-of: SAP stefan.kober@sap.com
Signed-off-by: Stefan Kober <stefan.kober@cyberus-technology.de>
---
 po/POTFILES         |  1 +
 src/ch/ch_hotplug.c | 85 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 86 insertions(+)

diff --git a/po/POTFILES b/po/POTFILES
index 181a36f541..23da794f84 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -25,6 +25,7 @@ src/ch/ch_domain.c
 src/ch/ch_driver.c
 src/ch/ch_events.c
 src/ch/ch_hostdev.c
+src/ch/ch_hotplug.c
 src/ch/ch_interface.c
 src/ch/ch_monitor.c
 src/ch/ch_process.c
diff --git a/src/ch/ch_hotplug.c b/src/ch/ch_hotplug.c
index c46628e7e9..7de688dc44 100644
--- a/src/ch/ch_hotplug.c
+++ b/src/ch/ch_hotplug.c
@@ -18,10 +18,95 @@
 
 #include <config.h>
 
+#include "ch_alias.h"
+#include "ch_domain.h"
 #include "ch_hotplug.h"
 
+#include "domain_event.h"
+#include "domain_validate.h"
+#include "virlog.h"
+
 #define VIR_FROM_THIS VIR_FROM_CH
 
+VIR_LOG_INIT("ch.ch_hotplug");
+
+static int
+chDomainAddDisk(virCHMonitor *mon, virDomainObj *vm, virDomainDiskDef *disk)
+{
+    if (chAssignDeviceDiskAlias(disk) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                    _("Assigning disk alias failed"));
+        return -1;
+    }
+
+    if (virCHMonitorAddDisk(mon, disk) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                    _("Adding disk to domain failed"));
+        return -1;
+    }
+
+    virDomainDiskInsert(vm->def, disk);
+
+    return 0;
+}
+
+G_GNUC_UNUSED
+static int
+chDomainAttachDeviceLive(virDomainObj *vm,
+                         virDomainDeviceDef *dev)
+{
+    int ret = -1;
+    virCHDomainObjPrivate *priv = vm->privateData;
+    virCHMonitor *mon = priv->monitor;
+
+    switch (dev->type) {
+    case VIR_DOMAIN_DEVICE_DISK: {
+        if (chDomainAddDisk(mon, vm, dev->data.disk) < 0) {
+            break;
+        }
+
+        dev->data.disk = NULL;
+        ret = 0;
+        break;
+    }
+    case VIR_DOMAIN_DEVICE_NET:
+    case VIR_DOMAIN_DEVICE_LEASE:
+    case VIR_DOMAIN_DEVICE_FS:
+    case VIR_DOMAIN_DEVICE_INPUT:
+    case VIR_DOMAIN_DEVICE_HOSTDEV:
+    case VIR_DOMAIN_DEVICE_WATCHDOG:
+    case VIR_DOMAIN_DEVICE_CONTROLLER:
+    case VIR_DOMAIN_DEVICE_REDIRDEV:
+    case VIR_DOMAIN_DEVICE_CHR:
+    case VIR_DOMAIN_DEVICE_RNG:
+    case VIR_DOMAIN_DEVICE_SHMEM:
+    case VIR_DOMAIN_DEVICE_MEMORY:
+    case VIR_DOMAIN_DEVICE_VSOCK:
+    case VIR_DOMAIN_DEVICE_NONE:
+    case VIR_DOMAIN_DEVICE_SOUND:
+    case VIR_DOMAIN_DEVICE_VIDEO:
+    case VIR_DOMAIN_DEVICE_GRAPHICS:
+    case VIR_DOMAIN_DEVICE_HUB:
+    case VIR_DOMAIN_DEVICE_SMARTCARD:
+    case VIR_DOMAIN_DEVICE_MEMBALLOON:
+    case VIR_DOMAIN_DEVICE_NVRAM:
+    case VIR_DOMAIN_DEVICE_TPM:
+    case VIR_DOMAIN_DEVICE_PANIC:
+    case VIR_DOMAIN_DEVICE_IOMMU:
+    case VIR_DOMAIN_DEVICE_AUDIO:
+    case VIR_DOMAIN_DEVICE_CRYPTO:
+    case VIR_DOMAIN_DEVICE_PSTORE:
+    case VIR_DOMAIN_DEVICE_LAST:
+    default:
+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
+                       _("live attach of device '%1$s' is not supported"),
+                       virDomainDeviceTypeToString(dev->type));
+        break;
+    }
+
+    return ret;
+}
+
 int
 chDomainAttachDeviceLiveAndUpdateConfig(virDomainObj *vm G_GNUC_UNUSED,
                                         virCHDriver *driver G_GNUC_UNUSED,
-- 
2.50.1
Re: [PATCH v3 07/13] ch: add disk attach helper functions
Posted by Michal Prívozník via Devel 5 months ago
On 9/4/25 14:10, Stefan Kober wrote:
> On-behalf-of: SAP stefan.kober@sap.com
> Signed-off-by: Stefan Kober <stefan.kober@cyberus-technology.de>
> ---
>  po/POTFILES         |  1 +
>  src/ch/ch_hotplug.c | 85 +++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 86 insertions(+)
> 
> diff --git a/po/POTFILES b/po/POTFILES
> index 181a36f541..23da794f84 100644
> --- a/po/POTFILES
> +++ b/po/POTFILES
> @@ -25,6 +25,7 @@ src/ch/ch_domain.c
>  src/ch/ch_driver.c
>  src/ch/ch_events.c
>  src/ch/ch_hostdev.c
> +src/ch/ch_hotplug.c
>  src/ch/ch_interface.c
>  src/ch/ch_monitor.c
>  src/ch/ch_process.c
> diff --git a/src/ch/ch_hotplug.c b/src/ch/ch_hotplug.c
> index c46628e7e9..7de688dc44 100644
> --- a/src/ch/ch_hotplug.c
> +++ b/src/ch/ch_hotplug.c
> @@ -18,10 +18,95 @@
>  
>  #include <config.h>
>  
> +#include "ch_alias.h"
> +#include "ch_domain.h"
>  #include "ch_hotplug.h"
>  

ch_hotplug.h should be included first as it may already include other
files. I mean, you correctly include ch_conf.h inside of ch_hotplug.h
because of the virCHDriver type. Again, not something that is critical
in this particular case, it's mostly good practice.

> +#include "domain_event.h"
> +#include "domain_validate.h"
> +#include "virlog.h"
> +
>  #define VIR_FROM_THIS VIR_FROM_CH
>  
> +VIR_LOG_INIT("ch.ch_hotplug");
> +
> +static int
> +chDomainAddDisk(virCHMonitor *mon, virDomainObj *vm, virDomainDiskDef *disk)
> +{
> +    if (chAssignDeviceDiskAlias(disk) < 0) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                    _("Assigning disk alias failed"));
> +        return -1;
> +    }
> +
> +    if (virCHMonitorAddDisk(mon, disk) < 0) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                    _("Adding disk to domain failed"));
> +        return -1;
> +    }
> +
> +    virDomainDiskInsert(vm->def, disk);
> +
> +    return 0;
> +}
> +
> +G_GNUC_UNUSED
> +static int
> +chDomainAttachDeviceLive(virDomainObj *vm,
> +                         virDomainDeviceDef *dev)
> +{
> +    int ret = -1;
> +    virCHDomainObjPrivate *priv = vm->privateData;
> +    virCHMonitor *mon = priv->monitor;
> +
> +    switch (dev->type) {
> +    case VIR_DOMAIN_DEVICE_DISK: {
> +        if (chDomainAddDisk(mon, vm, dev->data.disk) < 0) {
> +            break;
> +        }
> +
> +        dev->data.disk = NULL;
> +        ret = 0;
> +        break;
> +    }
> +    case VIR_DOMAIN_DEVICE_NET:
> +    case VIR_DOMAIN_DEVICE_LEASE:
> +    case VIR_DOMAIN_DEVICE_FS:
> +    case VIR_DOMAIN_DEVICE_INPUT:
> +    case VIR_DOMAIN_DEVICE_HOSTDEV:
> +    case VIR_DOMAIN_DEVICE_WATCHDOG:
> +    case VIR_DOMAIN_DEVICE_CONTROLLER:
> +    case VIR_DOMAIN_DEVICE_REDIRDEV:
> +    case VIR_DOMAIN_DEVICE_CHR:
> +    case VIR_DOMAIN_DEVICE_RNG:
> +    case VIR_DOMAIN_DEVICE_SHMEM:
> +    case VIR_DOMAIN_DEVICE_MEMORY:
> +    case VIR_DOMAIN_DEVICE_VSOCK:
> +    case VIR_DOMAIN_DEVICE_NONE:
> +    case VIR_DOMAIN_DEVICE_SOUND:
> +    case VIR_DOMAIN_DEVICE_VIDEO:
> +    case VIR_DOMAIN_DEVICE_GRAPHICS:
> +    case VIR_DOMAIN_DEVICE_HUB:
> +    case VIR_DOMAIN_DEVICE_SMARTCARD:
> +    case VIR_DOMAIN_DEVICE_MEMBALLOON:
> +    case VIR_DOMAIN_DEVICE_NVRAM:
> +    case VIR_DOMAIN_DEVICE_TPM:
> +    case VIR_DOMAIN_DEVICE_PANIC:
> +    case VIR_DOMAIN_DEVICE_IOMMU:
> +    case VIR_DOMAIN_DEVICE_AUDIO:
> +    case VIR_DOMAIN_DEVICE_CRYPTO:
> +    case VIR_DOMAIN_DEVICE_PSTORE:
> +    case VIR_DOMAIN_DEVICE_LAST:
> +    default:
> +        virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
> +                       _("live attach of device '%1$s' is not supported"),
> +                       virDomainDeviceTypeToString(dev->type));
> +        break;
> +    }
> +
> +    return ret;
> +}
> +
>  int
>  chDomainAttachDeviceLiveAndUpdateConfig(virDomainObj *vm G_GNUC_UNUSED,
>                                          virCHDriver *driver G_GNUC_UNUSED,


This is great place to implement this function ^^^. IOW, just move
corresponding change from the next patch here. Then you don't need to
annotate a function as unused.

Michal