parted/libparted-dasd-implicit-partition-disk-flag.patch
Arvin Schnell 839b5cc0ae Accepting request 1143217 from home:aschnell:parted
- update to version 3.6:
  - Support GPT partition attribute bit 63 as no_automount flag
  - Add type commands to set type-id on MS-DOS and type-uuid on GPT
  - Add swap flag support to the dasd disklabel
  - Add display of GPT disk and partition UUIDs in JSON output
  refreshed patches:
  - parted-mac.patch
  - libparted-dasd-implicit-partition-disk-flag.patch
  - tests-disable.patch
  removed patches:
  - direct-handling-of-partition-type-id-and-uuid.patch
  - type-command.patch
  - libparted-dasd-improve-lvm-raid-flag-handling.patch
  - libparted-dasd-add-swap-flag-handling-for-DASD-CDL.patch

OBS-URL: https://build.opensuse.org/request/show/1143217
OBS-URL: https://build.opensuse.org/package/show/Base:System/parted?expand=0&rev=157
2024-02-01 10:17:23 +00:00

132 lines
4.0 KiB
Diff

From: Petr Uzel <petr.uzel@suse.cz>
Subject: libparted: dasd: Add an implicit partition disk flag
Patch-mainline: no, custom SUSE patch
---
include/parted/disk.in.h | 4 +++-
libparted/disk.c | 2 ++
libparted/labels/dasd.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 50 insertions(+), 1 deletion(-)
Index: parted-3.3/include/parted/disk.in.h
===================================================================
--- parted-3.3.orig/include/parted/disk.in.h
+++ parted-3.3/include/parted/disk.in.h
@@ -38,10 +38,12 @@ enum _PedDiskFlag {
PED_DISK_CYLINDER_ALIGNMENT=1,
/* This flag controls whether the boot flag of a GPT PMBR is set */
PED_DISK_GPT_PMBR_BOOT=2,
+ /* This flag indicates that there is an implicit (aka fake) partition on the DASD disk */
+ PED_DISK_DASD_IMPLICIT_PARTITION=3,
};
// NOTE: DO NOT define using enums
#define PED_DISK_FIRST_FLAG 1 // PED_DISK_CYLINDER_ALIGNMENT
-#define PED_DISK_LAST_FLAG 2 // PED_DISK_GPT_PMBR_BOOT
+#define PED_DISK_LAST_FLAG 3 // PED_DISK_DASD_IMPLICIT_PARTITION
/**
* Partition types
Index: parted-3.3/libparted/disk.c
===================================================================
--- parted-3.3.orig/libparted/disk.c
+++ parted-3.3/libparted/disk.c
@@ -841,6 +841,8 @@ ped_disk_flag_get_name(PedDiskFlag flag)
return N_("cylinder_alignment");
case PED_DISK_GPT_PMBR_BOOT:
return N_("pmbr_boot");
+ case PED_DISK_DASD_IMPLICIT_PARTITION:
+ return N_("implicit_partition_table");
default:
ped_exception_throw (
PED_EXCEPTION_BUG,
Index: parted-3.3/libparted/labels/dasd.c
===================================================================
--- parted-3.3.orig/libparted/labels/dasd.c
+++ parted-3.3/libparted/labels/dasd.c
@@ -73,6 +73,7 @@ typedef struct {
unsigned int format_type;
unsigned int label_block;
volume_label_t vlabel;
+ unsigned int has_implicit_partition;
} DasdDiskSpecific;
static int dasd_probe (const PedDevice *dev);
@@ -107,6 +108,10 @@ static int dasd_partition_set_system (Pe
const PedFileSystemType* fs_type);
static int dasd_alloc_metadata (PedDisk* disk);
+static int dasd_disk_set_flag (PedDisk *disk, PedDiskFlag flag, int state);
+static int dasd_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag);
+static int dasd_disk_get_flag (const PedDisk *disk, PedDiskFlag flag);
+
#include "pt-common.h"
PT_define_limit_functions (dasd)
@@ -122,6 +122,9 @@
partition_get_type_id: NULL,
partition_set_type_uuid: NULL,
partition_get_type_uuid: NULL,
+ disk_set_flag: dasd_disk_set_flag,
+ disk_get_flag: dasd_disk_get_flag,
+ disk_is_flag_available: dasd_disk_is_flag_available,
get_partition_alignment: dasd_get_partition_alignment,
@@ -150,6 +158,8 @@ dasd_alloc (const PedDevice* dev)
return NULL;
}
+ disk_specific->has_implicit_partition = 0;
+
/* CDL format, newer */
disk_specific->format_type = 2;
disk_specific->label_block = 2;
@@ -289,6 +299,7 @@ dasd_read (PedDisk* disk)
goto error_close_dev;
disk_specific->format_type = 1;
+ disk_specific->has_implicit_partition = 1;
/* Register implicit partition */
ped_disk_delete_all (disk);
@@ -922,6 +933,40 @@ dasd_partition_enumerate (PedPartition*
}
static int
+dasd_disk_set_flag (PedDisk *disk, PedDiskFlag flag, int state)
+{
+ /* PED_DISK_DASD_IMPLICIT_PARTITION is immutable */
+ return 0;
+}
+
+static int
+dasd_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag)
+{
+ switch (flag)
+ {
+ case PED_DISK_DASD_IMPLICIT_PARTITION:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static int
+dasd_disk_get_flag (const PedDisk *disk, PedDiskFlag flag)
+{
+ DasdDiskSpecific* disk_specific = disk->disk_specific;
+
+ switch (flag)
+ {
+ case PED_DISK_DASD_IMPLICIT_PARTITION:
+ return disk_specific->has_implicit_partition;
+ break;
+ default:
+ return 0;
+ }
+}
+
+static int
dasd_partition_set_system (PedPartition* part,
const PedFileSystemType* fs_type)
{