Re: [PATCH v2] disk: update partition type reporting
Heinrich Schuchardt <[email protected]>
| Newsgroups | gmane.comp.boot-loaders.u-boot |
|---|---|
| Message-ID | <879f223c-eabd-4a7c-9b3c-01b5fc9930e0__9307.22350474156$1787480127$gmane$org@canonical.com> |
On 8/18/26 21:04, [email protected] wrote: > From: Denis Mukhin <[email protected]> > > Partition drivers currently report "U-Boot" as the human-readable > partition type. This does not describe the actual partition and can be > misleading to the users of this information. > > Update the human-readable partition type from "U-Boot" to > partition-specific type. > > For GUID partitions, when CONFIG_PARTITION_TYPE_GUID is enabled, use > gpt_pte.partition_type_guid.b directly for type reporting. > > Update the relevant tests and drop "U-Boot" check in > blk_get_device_part_str() since it can match against > gpt_pte.partition_type_guid.b (e.g. "linux"). > > Signed-off-by: Denis Mukhin <[email protected]> > --- > Changes since v1: > - use gpt_pte.partition_type_guid.b for CONFIG_PARTITION_TYPE_GUID=y > - add per-type partition string names > - updated commit message text > > v1: https://lore.kernel.org/u-boot/[email protected]/ > CI: https://github.com/u-boot/u-boot/pull/1036 > --- > disk/part.c | 13 +++---------- > disk/part_dos.c | 5 ++--- > disk/part_efi.c | 5 ++++- > disk/part_iso.c | 2 +- > include/part.h | 10 ++++++++++ > test/dm/scsi.c | 2 +- > 6 files changed, 21 insertions(+), 16 deletions(-) > > diff --git a/disk/part.c b/disk/part.c > index 4923dc44593c..0661394d2e5d 100644 > --- a/disk/part.c > +++ b/disk/part.c > @@ -383,7 +383,7 @@ int part_get_info_whole_disk(struct blk_desc *desc, > info->size = desc->lba; > info->blksz = desc->blksz; > info->bootable = 0; > - strcpy((char *)info->type, BOOT_PART_TYPE); > + strcpy((char *)info->type, PART_TYPE_NAME_UNKNOWN); > strcpy((char *)info->name, "Whole Disk"); > disk_partition_clr_uuid(info); > disk_partition_clr_type_guid(info); > @@ -475,7 +475,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str, > * host's own filesystem. > */ > if (!strcmp(ifname, "hostfs")) { > - strcpy((char *)info->type, BOOT_PART_TYPE); > + strcpy((char *)info->type, PART_TYPE_NAME_HOSTFS); > strcpy((char *)info->name, "Host filesystem"); > > return 0; > @@ -493,7 +493,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str, > return -EINVAL; > } > > - strcpy((char *)info->type, BOOT_PART_TYPE); > + strcpy((char *)info->type, PART_TYPE_NAME_UBI); > strcpy((char *)info->name, "UBI"); > return 0; > } > @@ -645,13 +645,6 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str, > goto cleanup; > } > } > - if (strncmp((char *)info->type, BOOT_PART_TYPE, sizeof(info->type)) != 0) { > - printf("** Invalid partition type \"%.32s\"" > - " (expect \"" BOOT_PART_TYPE "\")\n", > - info->type); > - ret = -EINVAL; > - goto cleanup; > - } > > (*desc)->log2blksz = LOG2((*desc)->blksz); > > diff --git a/disk/part_dos.c b/disk/part_dos.c > index 4e1d01b2f21e..2336321dc77e 100644 > --- a/disk/part_dos.c > +++ b/disk/part_dos.c > @@ -273,8 +273,7 @@ static int part_get_info_extended(struct blk_desc *desc, > info->size = (lbaint_t)get_unaligned_le32(&pt->nr_sects); > part_set_generic_name(desc, part_num, > (char *)info->name); > - /* sprintf(info->type, "%d, pt->sys_ind); */ > - strcpy((char *)info->type, "U-Boot"); > + strcpy((char *)info->type, PART_TYPE_NAME_DOS); For GPT partitions the output of the gpt read command looks good with this patch. Like GPT partitions, MBR partitions have different types. For type ef, info->type could be 'EFI System Partition'. For type 83, info->type could be 'Linux'. If you don't want a conversion function, write the hex number to info->type: sprintf(info->type, "%02x", pt->sys_ind); > info->bootable = get_bootable(pt); > if (CONFIG_IS_ENABLED(PARTITION_UUIDS)) { > char str[12]; > @@ -321,7 +320,7 @@ static int part_get_info_extended(struct blk_desc *desc, > else > info->blksz = DOS_PART_DEFAULT_SECTOR; > info->bootable = 0; > - strcpy((char *)info->type, "U-Boot"); > + strcpy((char *)info->type, PART_TYPE_NAME_DOS); > disk_partition_clr_uuid(info); > return 0; > } > diff --git a/disk/part_efi.c b/disk/part_efi.c > index d8b17ec2e91a..de7048639a6d 100644 > --- a/disk/part_efi.c > +++ b/disk/part_efi.c > @@ -304,7 +304,6 @@ static int __maybe_unused part_get_info_efi(struct blk_desc *desc, int part, > > snprintf((char *)info->name, sizeof(info->name), "%s", > print_efiname(&gpt_pte)); > - strcpy((char *)info->type, "U-Boot"); > info->bootable = get_bootable(&gpt_pte); > info->type_flags = gpt_pte.attributes.fields.type_guid_specific; > if (CONFIG_IS_ENABLED(PARTITION_UUIDS)) { > @@ -316,6 +315,10 @@ static int __maybe_unused part_get_info_efi(struct blk_desc *desc, int part, > uuid_bin_to_str(gpt_pte.partition_type_guid.b, > (char *)disk_partition_type_guid(info), > UUID_STR_FORMAT_GUID); > + snprintf((char *)info->type, sizeof(info->type), "%pUs", > + gpt_pte.partition_type_guid.b); > + } else { > + strcpy((char *)info->type, PART_TYPE_NAME_EFI); > } > > log_debug("start 0x" LBAF ", size 0x" LBAF ", name %s\n", info->start, > diff --git a/disk/part_iso.c b/disk/part_iso.c > index 6e05b2feffba..7b4e61f2099e 100644 > --- a/disk/part_iso.c > +++ b/disk/part_iso.c > @@ -135,7 +135,7 @@ int part_get_info_iso_verb(struct blk_desc *desc, int part_num, > /* the validation entry seems to be ok, now search the "partition" */ > entry_num=1; > offset=0x20; > - strcpy((char *)info->type, "U-Boot"); > + strcpy((char *)info->type, PART_TYPE_NAME_ISO); > part_set_generic_name(desc, part_num, (char *)info->name); > /* the bootcatalog (including validation Entry) is limited to 2048Bytes > * (63 boot entries + validation entry) */ > diff --git a/include/part.h b/include/part.h > index 15daacd7faaa..6fee58b290c9 100644 > --- a/include/part.h > +++ b/include/part.h > @@ -31,6 +31,16 @@ struct block_drvr { > #define PART_TYPE_MTD 0x06 > #define PART_TYPE_UBI 0x07 > > +#define PART_TYPE_NAME_UNKNOWN "unknown" > +#define PART_TYPE_NAME_MAC "mac" This is not a valid MAC partition type name. struct mac_partition has a field uchar type[32]. This is what you should copy in part_get_info_mac(). > +#define PART_TYPE_NAME_DOS "dos" Neither the constant name and nor the value make sense to me. There is nothing called 'dos' in an MBR partition table. > +#define PART_TYPE_NAME_ISO "iso" > +#define PART_TYPE_NAME_AMIGA "amiga" I sent a patch to drop the Amiga driver. > +#define PART_TYPE_NAME_EFI "efi" The table type is GPT not efi. Best regards Heinrich > +#define PART_TYPE_NAME_MTD "mtd" > +#define PART_TYPE_NAME_UBI "ubi" > +#define PART_TYPE_NAME_HOSTFS "hostfs" > + > /* maximum number of partition entries supported by search */ > #define DOS_ENTRY_NUMBERS 8 > #define ISO_ENTRY_NUMBERS 64 > diff --git a/test/dm/scsi.c b/test/dm/scsi.c > index fbc36a742446..fbf4d1000a10 100644 > --- a/test/dm/scsi.c > +++ b/test/dm/scsi.c > @@ -30,7 +30,7 @@ static int dm_test_scsi_base(struct unit_test_state *uts) > > info = &part->gpt_part_info; > ut_asserteq_str("sda1", info->name); > - ut_asserteq_str("U-Boot", info->type); > + ut_asserteq_str(PART_TYPE_NAME_DOS, info->type); > ut_asserteq(0x83 /* linux */, info->sys_ind); > > return 0;