[gnome-disk-utility] lvm2: Implement activate() and deactivate() GduDrive methods



commit 3cf867240ed90d34d31abb0ad4a43d163e6cc08b
Author: David Zeuthen <davidz redhat com>
Date:   Fri Feb 19 12:49:50 2010 -0500

    lvm2: Implement activate() and deactivate() GduDrive methods
    
    These methods are used by the GVfs gdu volume monitor.
    
    Signed-off-by: David Zeuthen <davidz redhat com>

 src/gdu/gdu-linux-lvm2-volume-group.c |   92 +++++++++++++++++++++++++++++++++
 1 files changed, 92 insertions(+), 0 deletions(-)
---
diff --git a/src/gdu/gdu-linux-lvm2-volume-group.c b/src/gdu/gdu-linux-lvm2-volume-group.c
index f7a9225..269968d 100644
--- a/src/gdu/gdu-linux-lvm2-volume-group.c
+++ b/src/gdu/gdu-linux-lvm2-volume-group.c
@@ -60,6 +60,14 @@ static gboolean gdu_linux_lvm2_volume_group_is_activatable (GduDrive *drive);
 static gboolean gdu_linux_lvm2_volume_group_can_deactivate (GduDrive *drive);
 static gboolean gdu_linux_lvm2_volume_group_can_activate (GduDrive *drive, gboolean *out_degraded);
 
+static void gdu_linux_lvm2_volume_group_activate (GduDrive              *drive,
+                                                  GduDriveActivateFunc   callback,
+                                                  gpointer               user_data);
+
+static void gdu_linux_lvm2_volume_group_deactivate (GduDrive                *drive,
+                                                    GduDriveDeactivateFunc   callback,
+                                                    gpointer                 user_data);
+
 static gboolean gdu_linux_lvm2_volume_group_can_create_volume (GduDrive        *drive,
                                                                gboolean        *out_is_uninitialized,
                                                                guint64         *out_largest_contiguous_free_segment,
@@ -133,6 +141,8 @@ gdu_linux_lvm2_volume_group_class_init (GduLinuxLvm2VolumeGroupClass *klass)
         drive_class->can_create_volume     = gdu_linux_lvm2_volume_group_can_create_volume;
         drive_class->create_volume         = gdu_linux_lvm2_volume_group_create_volume;
         drive_class->create_volume_finish  = gdu_linux_lvm2_volume_group_create_volume_finish;
+        drive_class->activate              = gdu_linux_lvm2_volume_group_activate;
+        drive_class->deactivate            = gdu_linux_lvm2_volume_group_deactivate;
 }
 
 static void
@@ -969,3 +979,85 @@ gdu_linux_lvm2_volume_group_get_compute_new_lv_name (GduLinuxLvm2VolumeGroup *vg
 
         return g_string_free (s, FALSE);
 }
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+typedef struct
+{
+        GduDrive *drive;
+        GduDriveActivateFunc callback;
+        gpointer user_data;
+} VGStartData;
+
+static void
+vg_start_cb (GduPool    *pool,
+             GError     *error,
+             gpointer    user_data)
+{
+        VGStartData *data = user_data;
+
+        data->callback (data->drive, NULL, error, data->user_data);
+        g_object_unref (data->drive);
+        g_free (data);
+}
+
+static void
+gdu_linux_lvm2_volume_group_activate (GduDrive              *drive,
+                                      GduDriveActivateFunc   callback,
+                                      gpointer               user_data)
+{
+        GduLinuxLvm2VolumeGroup *vg = GDU_LINUX_LVM2_VOLUME_GROUP (drive);
+        VGStartData *data;
+
+        data = g_new0 (VGStartData, 1);
+        data->drive = g_object_ref (drive);
+        data->callback = callback;
+        data->user_data = user_data;
+
+        gdu_pool_op_linux_lvm2_vg_start (vg->priv->pool,
+                                         vg->priv->uuid,
+                                         vg_start_cb,
+                                         data);
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+typedef struct
+{
+        GduDrive *drive;
+        GduDriveDeactivateFunc callback;
+        gpointer user_data;
+} VGStopData;
+
+static void
+vg_stop_cb (GduPool    *pool,
+            GError     *error,
+            gpointer    user_data)
+{
+        VGStopData *data = user_data;
+
+        data->callback (data->drive, error, data->user_data);
+        g_object_unref (data->drive);
+        g_free (data);
+}
+
+static void
+gdu_linux_lvm2_volume_group_deactivate (GduDrive                *drive,
+                                        GduDriveDeactivateFunc   callback,
+                                        gpointer                 user_data)
+{
+        GduLinuxLvm2VolumeGroup *vg = GDU_LINUX_LVM2_VOLUME_GROUP (drive);
+        VGStopData *data;
+
+        data = g_new0 (VGStopData, 1);
+        data->drive = g_object_ref (drive);
+        data->callback = callback;
+        data->user_data = user_data;
+
+        gdu_pool_op_linux_lvm2_vg_stop (vg->priv->pool,
+                                        vg->priv->uuid,
+                                        vg_stop_cb,
+                                        data);
+}
+
+/* ---------------------------------------------------------------------------------------------------- */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]