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

