
From: Xu Wang <cngesaint@gmail.com> This patch adds shareable property to disks. Signed-off-by: Xu Wang <cngesaint@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