[Libvirt-cim] [PATCH] Add support for creating filesystem type storage pools

Richard Maciel rmaciel at linux.vnet.ibm.com
Fri Apr 17 18:59:41 UTC 2009


+1

Kaitlin Rupert wrote:
> # HG changeset patch
> # User Kaitlin Rupert <karupert at us.ibm.com>
> # Date 1239905650 25200
> # Node ID 261a49710d0cb13c83e28f460583079db473d04f
> # Parent  4574c6f289f29c9afd2bd3a3434360c17891e9fe
> Add support for creating filesystem type storage pools
> 
> Signed-off-by: Kaitlin Rupert <karupert at us.ibm.com>
> 
> diff -r 4574c6f289f2 -r 261a49710d0c libxkutil/pool_parsing.c
> --- a/libxkutil/pool_parsing.c	Wed Apr 15 10:28:07 2009 -0700
> +++ b/libxkutil/pool_parsing.c	Thu Apr 16 11:14:10 2009 -0700
> @@ -52,6 +52,11 @@
>          free(pool.forward_dev);
>  }
> 
> +static void cleanup_disk_pool(struct disk_pool pool) {
> +        free(pool.path);
> +        free(pool.device_path);
> +}
> +
>  void cleanup_virt_pool(struct virt_pool **pool)
>  {
>          struct virt_pool *_pool = *pool;
> @@ -61,6 +66,8 @@
>   
>          if (_pool->type == CIM_RES_TYPE_NET)
>                  cleanup_net_pool(_pool->pool_info.net);
> +        else if (_pool->type == CIM_RES_TYPE_DISK)
> +                cleanup_disk_pool(_pool->pool_info.disk);
> 
>          free(_pool->id);
>          free(_pool);
> diff -r 4574c6f289f2 -r 261a49710d0c libxkutil/pool_parsing.h
> --- a/libxkutil/pool_parsing.h	Wed Apr 15 10:28:07 2009 -0700
> +++ b/libxkutil/pool_parsing.h	Thu Apr 16 11:14:10 2009 -0700
> @@ -45,6 +45,7 @@
>                DISK_POOL_ISCSI, 
>                DISK_POOL_LOGICAL} pool_type;
>          char *path;
> +        char *device_path;
>  };
> 
>  struct virt_pool {
> diff -r 4574c6f289f2 -r 261a49710d0c libxkutil/xmlgen.c
> --- a/libxkutil/xmlgen.c	Wed Apr 15 10:28:07 2009 -0700
> +++ b/libxkutil/xmlgen.c	Thu Apr 16 11:14:10 2009 -0700
> @@ -874,6 +874,8 @@
>  {
>          xmlNodePtr disk = NULL;
>          xmlNodePtr name = NULL;
> +        xmlNodePtr src = NULL;
> +        xmlNodePtr dev = NULL;
>          xmlNodePtr target = NULL;
>          xmlNodePtr path = NULL;
>          const char *type = NULL;
> @@ -894,6 +896,21 @@
>          if (name == NULL)
>                  goto out;
> 
> +        if (pool->device_path != NULL) {
> +                src = xmlNewChild(disk, NULL, BAD_CAST "source", NULL);
> +                if (src == NULL)
> +                        goto out;
> +
> +                dev = xmlNewChild(src, NULL, BAD_CAST "device", BAD_CAST NULL);
> +                if (dev == NULL)
> +                        goto out;
> +
> +                if (xmlNewProp(dev,
> +                               BAD_CAST "path", 
> +                               BAD_CAST pool->device_path) == NULL)
> +                        goto out;
> +        }
> +
>          target = xmlNewChild(disk, NULL, BAD_CAST "target", NULL);
>          if (target == NULL)
>                  goto out;
> diff -r 4574c6f289f2 -r 261a49710d0c schema/ResourceAllocationSettingData.mof
> --- a/schema/ResourceAllocationSettingData.mof	Wed Apr 15 10:28:07 2009 -0700
> +++ b/schema/ResourceAllocationSettingData.mof	Thu Apr 16 11:14:10 2009 -0700
> @@ -207,6 +207,7 @@
>                  "Disk, ISCSI, Logical"}]
>        uint16 Type;
>        string Path;
> +      string DevicePath;
>  };
> 
>  [Description ("KVM virtual disk pool settings"),
> @@ -220,6 +221,7 @@
>                  "Disk, ISCSI, Logical"}]
>        uint16 Type;
>        string Path;
> +      string DevicePath;
>  };
> 
>  [Description ("LXC virtual disk pool settings"),
> @@ -233,5 +235,6 @@
>                  "Disk, ISCSI, Logical"}]
>        uint16 Type;
>        string Path;
> +      string DevicePath;
>  };
> 
> diff -r 4574c6f289f2 -r 261a49710d0c src/Virt_ResourcePoolConfigurationService.c
> --- a/src/Virt_ResourcePoolConfigurationService.c	Wed Apr 15 10:28:07 2009 -0700
> +++ b/src/Virt_ResourcePoolConfigurationService.c	Thu Apr 16 11:14:10 2009 -0700
> @@ -114,6 +114,25 @@
>  }
> 
>  #if VIR_USE_LIBVIRT_STORAGE
> +static void init_disk_pool(struct virt_pool *pool)
> +{
> +        pool->pool_info.disk.device_path = NULL;
> +        pool->pool_info.disk.path = NULL;
> +}
> +
> +static const char *disk_fs_pool(CMPIInstance *inst,
> +                                struct virt_pool *pool)
> +{
> +        const char *val = NULL;
> +
> +        if (cu_get_str_prop(inst, "DevicePath", &val) != CMPI_RC_OK)
> +                return "Missing `DevicePath' property";
> +
> +        pool->pool_info.disk.device_path = strdup(val);
> +
> +        return NULL;
> +}
> +
>  static const char *disk_rasd_to_pool(CMPIInstance *inst,
>                                      struct virt_pool *pool)
>  {
> @@ -124,8 +143,19 @@
>          if (cu_get_u16_prop(inst, "Type", &type) != CMPI_RC_OK)
>                  return "Missing `Type' property";
> 
> -        if (type != DISK_POOL_DIR)
> +        init_disk_pool(pool);
> +
> +        switch (type) {
> +        case DISK_POOL_DIR:
> +                break;
> +        case DISK_POOL_FS:
> +                msg = disk_fs_pool(inst, pool);
> +                if (msg != NULL)
> +                        goto out;
> +                break;
> +        default:
>                  return "Storage pool type not supported";
> +        }
> 
>          pool->pool_info.disk.pool_type = type;
> 
> @@ -134,6 +164,7 @@
> 
>          pool->pool_info.disk.path = strdup(val);
> 
> + out:
>          return msg;
> 
>  }
> 
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim


-- 
Richard Maciel, MSc
IBM Linux Technology Center
rmaciel at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list