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 _______________________________________________ bug-parted mailing list bug-parted@gnu.org http://lists.gnu.org/mailman/listinfo/bug-parted