From: AndrĂ© Wild <[email protected]>

This commit corrects the reading of lvm/raid flags on DASD/CDL formatted
disks. Previously, users were not able to see what was the actual flags
stored on the disk. Also, warn users in interactive mode about existing
file systems when setting the lvm/raid flag. In script mode, this
warning is ignored.

Signed-off-by: AndrĂ© Wild <[email protected]>
Signed-off-by: Wang Dong <[email protected]>
Signed-off-by: Hendrik Brueckner <[email protected]>
---
 libparted/labels/dasd.c | 33 +++++++++++++++++++++------------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/libparted/labels/dasd.c b/libparted/labels/dasd.c
index a8849a9..c61e014 100644
--- a/libparted/labels/dasd.c
+++ b/libparted/labels/dasd.c
@@ -446,18 +446,9 @@ dasd_read (PedDisk* disk)
                }
 
                dasd_data = part->disk_specific;
-
-               if ((strncmp(PART_TYPE_RAID, str, 6) == 0) &&
-                   (ped_file_system_probe(&part->geom) == NULL))
-                       ped_partition_set_flag(part, PED_PARTITION_RAID, 1);
-               else
-                       ped_partition_set_flag(part, PED_PARTITION_RAID, 0);
-
-               if ((strncmp(PART_TYPE_LVM, str, 6) == 0) &&
-                   (ped_file_system_probe(&part->geom) == NULL))
-                       ped_partition_set_flag(part, PED_PARTITION_LVM, 1);
-               else
-                       ped_partition_set_flag(part, PED_PARTITION_LVM, 0);
+               dasd_data->raid = !strncmp(PART_TYPE_RAID, str, 6);
+               dasd_data->lvm = !strncmp(PART_TYPE_LVM, str, 6);
+               dasd_partition_set_system(part, part->fs_type);
 
                if (strncmp(PART_TYPE_SWAP, str, 6) == 0) {
                        fs = ped_file_system_probe(&part->geom);
@@ -743,6 +734,24 @@ dasd_partition_set_flag (PedPartition* part, 
PedPartitionFlag flag, int state)
 
        switch (flag) {
                case PED_PARTITION_RAID:
+               case PED_PARTITION_LVM:
+                       if (!state)
+                               break;
+                       if (!ped_file_system_probe(&part->geom))
+                               break;
+                       if (ped_exception_throw (PED_EXCEPTION_WARNING,
+                                                PED_EXCEPTION_YES_NO,
+                                                _("Setting %s for this 
partition might render any existing file system unusable.\n"
+                                                  "Are you sure you want to 
proceed?"),
+                                                ped_partition_flag_get_name 
(flag))
+                               == PED_EXCEPTION_NO)
+                               return 0;
+               default:
+                       break;
+       }
+
+       switch (flag) {
+               case PED_PARTITION_RAID:
                        if (state)
                                dasd_data->lvm = 0;
                        dasd_data->raid = state;
-- 
2.8.4


Reply via email to