bug-parted
[Top][All Lists]
Advanced

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

[PATCH parted 1/2] libparted: push/pop update mode around ped_disk_set_f


From: Hans de Goede
Subject: [PATCH parted 1/2] libparted: push/pop update mode around ped_disk_set_flag
Date: Thu, 17 Dec 2009 10:27:39 +0100

Disk flags can change how the metadata gets allocated, so push/pop
update mode around ops->disk_set_flag, so that the metadata gets
re-allocated.
* libparted/disk.c (ped_disk_set_flag): push/pop update mode.
---
 libparted/disk.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/libparted/disk.c b/libparted/disk.c
index 7cbde81..0dc97f3 100644
--- a/libparted/disk.c
+++ b/libparted/disk.c
@@ -759,10 +759,15 @@ ped_disk_get_max_primary_partition_count (const PedDisk* 
disk)
 int
 ped_disk_set_flag(PedDisk *disk, PedDiskFlag flag, int state)
 {
+        int ret;
+
         PED_ASSERT (disk != NULL, return 0);
 
         PedDiskOps *ops = disk->type->ops;
 
+        if (!_disk_push_update_mode(disk))
+                return 0;
+
         if (!ped_disk_is_flag_available(disk, flag)) {
                 ped_exception_throw (
                         PED_EXCEPTION_ERROR,
@@ -770,10 +775,16 @@ ped_disk_set_flag(PedDisk *disk, PedDiskFlag flag, int 
state)
                         "The flag '%s' is not available for %s disk labels.",
                         ped_disk_flag_get_name(flag),
                         disk->type->name);
+                _disk_pop_update_mode(disk);
                 return 0;
         }
 
-        return ops->disk_set_flag(disk, flag, state);
+        ret = ops->disk_set_flag(disk, flag, state);
+
+        if (!_disk_pop_update_mode (disk))
+                return 0;
+
+        return ret;
 }
 
 /**
-- 
1.6.5.2





reply via email to

[Prev in Thread] Current Thread [Next in Thread]