[libvirt] [libvirt-glib] Add gvir_storage_vol_resize()

Zeeshan Ali (Khattak) zeeshanak at gnome.org
Wed Feb 1 00:27:28 UTC 2012


From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>

Add wrapper for virStorageVolResize().
---
 libvirt-gobject/libvirt-gobject-storage-vol.c |   45 +++++++++++++++++++++++++
 libvirt-gobject/libvirt-gobject-storage-vol.h |   20 +++++++++++
 libvirt-gobject/libvirt-gobject.sym           |    1 +
 3 files changed, 66 insertions(+), 0 deletions(-)

diff --git a/libvirt-gobject/libvirt-gobject-storage-vol.c b/libvirt-gobject/libvirt-gobject-storage-vol.c
index 491e2e6..f6f0c50 100644
--- a/libvirt-gobject/libvirt-gobject-storage-vol.c
+++ b/libvirt-gobject/libvirt-gobject-storage-vol.c
@@ -299,3 +299,48 @@ gboolean gvir_storage_vol_delete(GVirStorageVol *vol,
 
     return TRUE;
 }
+
+/**
+ * gvir_storage_vol_resize:
+ * @vol: the storage volume to resize
+ * @capacity: the new capacity of the volume
+ * @flags: the flags
+ * @err: Return location for errors, or NULL
+ *
+ * Changes the capacity of the storage volume @vol to @capacity.
+ *
+ * Returns: the new capacity of the volume on success, 0 otherwise
+ */
+gboolean gvir_storage_vol_resize(GVirStorageVol *vol,
+                                 guint64 capacity,
+                                 GVirStorageVolResizeFlags flags,
+                                 GError **err)
+{
+    GVirStoragePoolInfo* pool_info = NULL;
+    GVirStorageVolInfo* volume_info = NULL;
+    gboolean ret = FALSE;
+
+    pool_info = gvir_storage_pool_get_info (vol->priv->pool, err);
+    if (err != NULL && *err != NULL)
+        goto cleanup;
+    volume_info = gvir_storage_vol_get_info (vol, err);
+    if (err != NULL && *err != NULL)
+        goto cleanup;
+
+    if (virStorageVolResize(vol->priv->handle, capacity, flags) < 0) {
+        gvir_set_error_literal(err,
+                               GVIR_STORAGE_VOL_ERROR,
+                               0,
+                               "Unable to resize volume storage");
+        goto cleanup;
+    }
+
+    ret = TRUE;
+
+cleanup:
+    if (pool_info)
+        g_boxed_free(GVIR_TYPE_STORAGE_POOL_INFO, pool_info);
+    if (volume_info)
+        gvir_storage_vol_info_free(volume_info);
+    return ret;
+}
diff --git a/libvirt-gobject/libvirt-gobject-storage-vol.h b/libvirt-gobject/libvirt-gobject-storage-vol.h
index 25f683a..459a2ac 100644
--- a/libvirt-gobject/libvirt-gobject-storage-vol.h
+++ b/libvirt-gobject/libvirt-gobject-storage-vol.h
@@ -23,6 +23,7 @@
 #if !defined(__LIBVIRT_GOBJECT_H__) && !defined(LIBVIRT_GOBJECT_BUILD)
 #error "Only <libvirt-gobject/libvirt-gobject.h> can be included directly."
 #endif
+#include <libvirt/libvirt.h>
 
 #ifndef __LIBVIRT_GOBJECT_STORAGE_VOL_H__
 #define __LIBVIRT_GOBJECT_STORAGE_VOL_H__
@@ -65,6 +66,21 @@ typedef enum {
     GVIR_STORAGE_VOL_STATE_DIR   = 2, /* Directory-passthrough based volume */
 } GVirStorageVolType;
 
+/**
+ * GVirStorageVolResizeFlags:
+ * @GVIR_STORAGE_VOL_RESIZE_NONE: No flags
+ * @GVIR_STORAGE_VOL_RESIZE_ALLOCATE: force allocation of new size
+ * @GVIR_STORAGE_VOL_RESIZE_DELTA: size is relative to current
+ * @GVIR_STORAGE_VOL_RESIZE_SHRINK: allow decrease in capacity. This combined
+ * with #GVIR_STORAGE_VOL_RESIZE_DELTA, implies a negative delta.
+ */
+typedef enum {
+    GVIR_STORAGE_VOL_RESIZE_NONE     = 0,
+    GVIR_STORAGE_VOL_RESIZE_ALLOCATE = VIR_STORAGE_VOL_RESIZE_ALLOCATE,
+    GVIR_STORAGE_VOL_RESIZE_DELTA    = VIR_STORAGE_VOL_RESIZE_DELTA,
+    GVIR_STORAGE_VOL_RESIZE_SHRINK   = VIR_STORAGE_VOL_RESIZE_SHRINK,
+} GVirStorageVolResizeFlags;
+
 typedef struct _GVirStorageVolInfo GVirStorageVolInfo;
 struct _GVirStorageVolInfo
 {
@@ -89,6 +105,10 @@ GVirConfigStorageVol *gvir_storage_vol_get_config(GVirStorageVol *vol,
                                                   GError **err);
 GVirStorageVolInfo *gvir_storage_vol_get_info(GVirStorageVol *vol,
                                               GError **err);
+gboolean gvir_storage_vol_resize(GVirStorageVol *vol,
+                                 guint64 capacity,
+                                 GVirStorageVolResizeFlags flags,
+                                 GError **err);
 
 G_END_DECLS
 
diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym
index a4f03f7..468bf65 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -126,6 +126,7 @@ LIBVIRT_GOBJECT_0.0.4 {
 	gvir_storage_vol_get_config;
 	gvir_storage_vol_get_info;
 	gvir_storage_vol_delete;
+	gvir_storage_vol_resize;
 
 	gvir_connection_handle_get_type;
 
-- 
1.7.7.6




More information about the libvir-list mailing list