On 6/25/24 8:50 PM, Daniel Golle wrote: > diff --git a/block/partitions/core.c b/block/partitions/core.c > index ab76e64f0f6c..f88829e254e6 100644 > --- a/block/partitions/core.c > +++ b/block/partitions/core.c > @@ -10,6 +10,8 @@ > #include <linux/ctype.h> > #include <linux/vmalloc.h> > #include <linux/raid/detect.h> > +#include <linux/property.h> > + > #include "check.h" > > static int (*const check_part[])(struct parsed_partitions *) = { > @@ -281,6 +283,42 @@ static ssize_t whole_disk_show(struct device *dev, > } > static const DEVICE_ATTR(whole_disk, 0444, whole_disk_show, NULL); > > +static struct fwnode_handle *find_partition_fwnode(struct block_device *bdev) > +{ > + struct fwnode_handle *fw_parts, *fw_part; > + struct device *ddev = disk_to_dev(bdev->bd_disk); > + const char *partname, *uuid; > + u32 partno; > + > + fw_parts = device_get_named_child_node(ddev, "partitions"); > + if (!fw_parts) > + fw_parts = device_get_named_child_node(ddev->parent, "partitions"); > + > + if (!fw_parts) > + return NULL; That last if check should to inside the previous one. > + fwnode_for_each_child_node(fw_parts, fw_part) { > + if (!fwnode_property_read_string(fw_part, "uuid", &uuid) && > + (!bdev->bd_meta_info || strlen(uuid) > PARTITION_META_INFO_UUIDLTH || > + strncmp(uuid, bdev->bd_meta_info->uuid, PARTITION_META_INFO_UUIDLTH))) > + continue; > + > + if (!fwnode_property_read_string(fw_part, "partname", &partname) && > + (!bdev->bd_meta_info || strlen(uuid) > PARTITION_META_INFO_VOLNAMELTH || > + strncmp(partname, bdev->bd_meta_info->volname, > + PARTITION_META_INFO_VOLNAMELTH))) > + continue; This is pretty hard to make sense of... -- Jens Axboe