[Libvirt-cim] [PATCH] Add shareable property to disk

cngesaint at gmail.com cngesaint at gmail.com
Wed Jul 24 02:49:19 UTC 2013


From: Xu Wang <cngesaint at gmail.com>

This patch adds shareable property to disks.

Signed-off-by: Xu Wang <cngesaint at gmail.com>
---
 schema/ResourceAllocationSettingData.mof  |    6 ++++++
 src/Virt_RASD.c                           |    6 ++++++
 src/Virt_SettingsDefineCapabilities.c     |   14 ++++++++++++++
 src/Virt_VirtualSystemManagementService.c |    6 ++++++
 4 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/schema/ResourceAllocationSettingData.mof b/schema/ResourceAllocationSettingData.mof
index 108dff7..871ab04 100644
--- a/schema/ResourceAllocationSettingData.mof
+++ b/schema/ResourceAllocationSettingData.mof
@@ -28,6 +28,9 @@ class Xen_DiskResourceAllocationSettingData : Xen_ResourceAllocationSettingData
 
       [Description ("cache setting for device")]
       string DriverCache;
+
+      [Description ("if device is shareable")]
+      boolean shareable;
 };
 
 [Description ("KVM virtual disk configuration"),
@@ -61,6 +64,9 @@ class KVM_DiskResourceAllocationSettingData : KVM_ResourceAllocationSettingData
       
       [Description ("filesystem access mode")]
       string AccessMode;
+
+      [Description ("if device is shareable")]
+      boolean shareable;
 };
 
 [Description ("LXC virtual disk configuration"),
diff --git a/src/Virt_RASD.c b/src/Virt_RASD.c
index baf4331..150ccd3 100644
--- a/src/Virt_RASD.c
+++ b/src/Virt_RASD.c
@@ -421,6 +421,12 @@ static CMPIStatus set_disk_rasd_params(const CMPIBroker *broker,
                               (CMPIValue *)dev->dev.disk.access_mode,
                               CMPI_chars);
 
+        if(dev->dev.disk.shareable)
+                CMSetProperty(inst,
+                              "shareable",
+                              (CMPIValue *)&(dev->dev.disk.shareable),
+                              CMPI_boolean);
+
         virStoragePoolFree(pool);
         virStorageVolFree(vol);
         virConnectClose(conn);
diff --git a/src/Virt_SettingsDefineCapabilities.c b/src/Virt_SettingsDefineCapabilities.c
index 2c35d84..78c128c 100644
--- a/src/Virt_SettingsDefineCapabilities.c
+++ b/src/Virt_SettingsDefineCapabilities.c
@@ -1039,6 +1039,7 @@ static CMPIStatus set_disk_props(int type,
                                  uint64_t disk_size,
                                  uint16_t emu_type,
                                  bool readonly,
+                                 bool shareable,
                                  const char *cache,
                                  struct inst_list *list)
 {
@@ -1087,6 +1088,10 @@ static CMPIStatus set_disk_props(int type,
                         CMSetProperty(inst, "readonly",
                                       (CMPIValue *)&readonly, CMPI_boolean);
 
+                if(shareable)
+                        CMSetProperty(inst, "shareable",
+                                      (CMPIValue *)&shareable, CMPI_boolean);
+
                 if(cache != NULL)
                         CMSetProperty(inst, "cache",
                                       (CMPIValue *)cache, CMPI_chars);
@@ -1111,6 +1116,7 @@ static CMPIStatus cdrom_or_floppy_template(const CMPIObjectPath *ref,
         const char *dev_str = NULL;
         char *id_str = NULL;
         bool readonly = true;
+        bool shareable = false;
         const char *cache = "none";
 
         if (emu_type == VIRT_DISK_TYPE_CDROM)
@@ -1158,6 +1164,7 @@ static CMPIStatus cdrom_or_floppy_template(const CMPIObjectPath *ref,
                                            vol_size,
                                            emu_type,
                                            readonly,
+                                           shareable,
                                            cache,
                                            list);
                 }
@@ -1169,6 +1176,7 @@ static CMPIStatus cdrom_or_floppy_template(const CMPIObjectPath *ref,
                                    vol_size,
                                    emu_type,
                                    readonly,
+                                   shareable,
                                    cache,
                                    list);
 
@@ -1244,6 +1252,7 @@ static CMPIStatus default_disk_template(const CMPIObjectPath *ref,
         int type = 0;
         bool ret;
         bool readonly = true;
+        bool shareable = false;
         const char *cache = "none";
 
         CMPIStatus s = {CMPI_RC_OK, NULL};
@@ -1296,6 +1305,7 @@ static CMPIStatus default_disk_template(const CMPIObjectPath *ref,
                                            disk_size,
                                            emu_type,
                                            readonly,
+                                           shareable,
                                            cache,
                                            list);
                         if (s.rc != CMPI_RC_OK)
@@ -1317,6 +1327,7 @@ static CMPIStatus default_disk_template(const CMPIObjectPath *ref,
                                    disk_size,
                                    emu_type,
                                    readonly,
+                                   shareable,
                                    cache,
                                    list);
         }
@@ -1444,6 +1455,7 @@ static CMPIStatus avail_volume_template(const CMPIObjectPath *ref,
         int ret;
         uint16_t emu_type = 0;
         bool readonly = false;
+        bool shareable = false;
         const char *cache = "none";
 
         ret = virStorageVolGetInfo(volume_ptr, &vol_info);
@@ -1502,6 +1514,7 @@ static CMPIStatus avail_volume_template(const CMPIObjectPath *ref,
                                            vol_size,
                                            emu_type,
                                            readonly,
+                                           shareable,
                                            cache,
                                            list);
                 }
@@ -1513,6 +1526,7 @@ static CMPIStatus avail_volume_template(const CMPIObjectPath *ref,
                                    vol_size,
                                    emu_type,
                                    readonly,
+                                   shareable,
                                    cache,
                                    list);
         } else {
diff --git a/src/Virt_VirtualSystemManagementService.c b/src/Virt_VirtualSystemManagementService.c
index 5adfe20..8ced2d6 100644
--- a/src/Virt_VirtualSystemManagementService.c
+++ b/src/Virt_VirtualSystemManagementService.c
@@ -994,6 +994,7 @@ static const char *disk_rasd_to_vdev(CMPIInstance *inst,
         uint16_t type;
         bool read = false;
         int rc;
+        bool shareable = false;
 
         CU_DEBUG("Enter disk_rasd_to_vdev");
         if (cu_get_str_prop(inst, "VirtualDevice", &val) != CMPI_RC_OK)
@@ -1093,6 +1094,11 @@ static const char *disk_rasd_to_vdev(CMPIInstance *inst,
         else 
                 dev->dev.disk.access_mode = strdup(val);
 
+        if (cu_get_bool_prop(inst, "shareable", &shareable) != CMPI_RC_OK)
+                dev->dev.disk.shareable = false;
+        else
+                dev->dev.disk.shareable = shareable;
+
         free(dev->id);
         dev->id = strdup(dev->dev.disk.virtual_dev);
 
-- 
1.7.1




More information about the Libvirt-cim mailing list