parted/libparted-dasd-add-swap-flag-handling-for-DASD-CDL.patch
2017-06-15 19:25:03 +00:00

135 lines
3.8 KiB
Diff

From: Sebastian Parschauer <sparschauer@suse.de>
Date: Thu, 15 Jun 2017 19:04:41 +0200
Subject: libparted/dasd: add swap flag handling for DASD-CDL
References: fate#314888, bsc#1044536
Patch-mainline: no, upstream wants to drop the swap flag
The way how the linux-swap partition type is handled is not how
fdasd handles it. It is only set if there is a linux-swap file
system set with mkpart or if there is a swap file system created
by mkswap on disk. But we want to know the partition type on disk.
So introduce a swap flag which behaves like the other flags. The
parted function do_mkpart() sets this flag for us if creating a
partition with FS type name "linux-swap*".
Signed-off-by: Sebastian Parschauer <sparschauer@suse.de>
---
libparted/labels/dasd.c | 42 +++++++++++++++++++++++++-----------------
1 file changed, 25 insertions(+), 17 deletions(-)
--- a/libparted/labels/dasd.c
+++ b/libparted/labels/dasd.c
@@ -65,6 +65,7 @@ extern void ped_disk_dasd_done ();
typedef struct {
int type;
int system;
+ int swap;
int raid;
int lvm;
} DasdPartitionData;
@@ -316,6 +317,7 @@ dasd_read (PedDisk* disk)
part->num = 1;
part->fs_type = ped_file_system_probe (&part->geom);
dasd_data = part->disk_specific;
+ dasd_data->swap = 0;
dasd_data->raid = 0;
dasd_data->lvm = 0;
dasd_data->type = 0;
@@ -400,6 +402,7 @@ dasd_read (PedDisk* disk)
part->num = 1;
part->fs_type = ped_file_system_probe (&part->geom);
dasd_data = part->disk_specific;
+ dasd_data->swap = 0;
dasd_data->raid = 0;
dasd_data->lvm = 0;
dasd_data->type = 0;
@@ -457,18 +460,11 @@ dasd_read (PedDisk* disk)
}
dasd_data = part->disk_specific;
+ dasd_data->swap = !strncmp(PART_TYPE_SWAP, str, 6);
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);
- if (fs && is_linux_swap(fs->name)) {
- dasd_data->system = PARTITION_LINUX_SWAP;
- PDEBUG;
- }
- }
-
vtoc_ebcdic_enc(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44);
dasd_data->type = 0;
@@ -745,14 +741,25 @@ dasd_partition_set_flag (PedPartition* p
dasd_data = part->disk_specific;
switch (flag) {
+ case PED_PARTITION_SWAP:
+ if (state) {
+ dasd_data->raid = 0;
+ dasd_data->lvm = 0;
+ }
+ dasd_data->swap = state;
+ return ped_partition_set_system(part, part->fs_type);
case PED_PARTITION_RAID:
- if (state)
+ if (state) {
+ dasd_data->swap = 0;
dasd_data->lvm = 0;
+ }
dasd_data->raid = state;
return ped_partition_set_system(part, part->fs_type);
case PED_PARTITION_LVM:
- if (state)
+ if (state) {
+ dasd_data->swap = 0;
dasd_data->raid = 0;
+ }
dasd_data->lvm = state;
return ped_partition_set_system(part, part->fs_type);
default:
@@ -770,6 +777,8 @@ dasd_partition_get_flag (const PedPartit
dasd_data = part->disk_specific;
switch (flag) {
+ case PED_PARTITION_SWAP:
+ return dasd_data->swap;
case PED_PARTITION_RAID:
return dasd_data->raid;
case PED_PARTITION_LVM:
@@ -784,6 +793,8 @@ dasd_partition_is_flag_available (const
PedPartitionFlag flag)
{
switch (flag) {
+ case PED_PARTITION_SWAP:
+ return 1;
case PED_PARTITION_RAID:
return 1;
case PED_PARTITION_LVM:
@@ -962,17 +973,14 @@ dasd_partition_set_system (PedPartition*
return 1;
}
- if (!fs_type) {
- dasd_data->system = PARTITION_LINUX;
- PDEBUG;
- } else if (is_linux_swap (fs_type->name)) {
+ if (dasd_data->swap) {
dasd_data->system = PARTITION_LINUX_SWAP;
PDEBUG;
- } else {
- dasd_data->system = PARTITION_LINUX;
- PDEBUG;
+ return 1;
}
+ dasd_data->system = PARTITION_LINUX;
+ PDEBUG;
return 1;
}