137 lines
3.9 KiB
Diff
137 lines
3.9 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(-)
|
|
|
|
Index: parted-3.3/libparted/labels/dasd.c
|
|
===================================================================
|
|
--- parted-3.3.orig/libparted/labels/dasd.c
|
|
+++ parted-3.3/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;
|
|
@@ -749,14 +745,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:
|
|
@@ -774,6 +781,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:
|
|
@@ -802,6 +811,8 @@ dasd_partition_is_flag_available (const
|
|
return 0;
|
|
|
|
switch (flag) {
|
|
+ case PED_PARTITION_SWAP:
|
|
+ return 1;
|
|
case PED_PARTITION_RAID:
|
|
return 1;
|
|
case PED_PARTITION_LVM:
|
|
@@ -985,17 +996,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;
|
|
}
|
|
|