From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Tue, 10 May 2022 16:02:19 +0200 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1noQRP-008OQy-9e for lore@lore.pengutronix.de; Tue, 10 May 2022 16:02:19 +0200 Received: from localhost ([127.0.0.1] helo=metis.ext.pengutronix.de) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1noQRN-0001yB-SS; Tue, 10 May 2022 16:02:17 +0200 Received: from ptz.office.stw.pengutronix.de ([2a0a:edc0:0:900:1d::77] helo=[127.0.0.1]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1noQRM-0001xo-Eh; Tue, 10 May 2022 16:02:16 +0200 Message-ID: <5bd2488f-e2a2-a6d7-a041-c7ee9fe01624@pengutronix.de> Date: Tue, 10 May 2022 16:02:16 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.0 Content-Language: en-US To: Michael Olbrich , oss-tools@pengutronix.de References: <20220510065728.3489540-1-m.olbrich@pengutronix.de> <20220510065728.3489540-3-m.olbrich@pengutronix.de> From: Ahmad Fatoum In-Reply-To: <20220510065728.3489540-3-m.olbrich@pengutronix.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [OSS-Tools] [PATCH v3 2/3] libdt: add support for barebox, storage-by-uuid X-BeenThere: oss-tools@pengutronix.de X-Mailman-Version: 2.1.29 Precedence: list List-Id: Pengutronix Public Open-Source-Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "OSS-Tools" X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: oss-tools-bounces@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false On 10.05.22 08:57, Michael Olbrich wrote: > Signed-off-by: Michael Olbrich > --- > > uuid comparison fixed: > - compare the correct uuids > - don't crash when no uuid is present > > src/libdt.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 69 insertions(+), 5 deletions(-) > > diff --git a/src/libdt.c b/src/libdt.c > index 48c31931e8a1..f2c7c49ebcde 100644 > --- a/src/libdt.c > +++ b/src/libdt.c > @@ -2358,6 +2358,52 @@ out: > return dev; > } > > +static struct udev_device *of_find_device_by_uuid(const char *uuid) > +{ > + struct udev *udev; > + struct udev_enumerate *enumerate; > + struct udev_list_entry *devices, *dev_list_entry; > + int ret = 0; > + > + udev = udev_new(); > + if (!udev) { > + fprintf(stderr, "Can't create udev\n"); > + return NULL; > + } > + > + enumerate = udev_enumerate_new(udev); > + udev_enumerate_add_match_subsystem(enumerate, "block"); > + udev_enumerate_scan_devices(enumerate); > + devices = udev_enumerate_get_list_entry(enumerate); > + udev_list_entry_foreach(dev_list_entry, devices) { > + const char *path, *devtype, *outpath, *dev_uuid; > + struct udev_device *device; > + > + path = udev_list_entry_get_name(dev_list_entry); > + device = udev_device_new_from_syspath(udev, path); > + > + /* distinguish device (disk) from partitions */ > + devtype = udev_device_get_devtype(device); > + if (!devtype) > + continue; > + if (!strcmp(devtype, "disk")) { > + dev_uuid = udev_device_get_property_value(device, "ID_PART_TABLE_UUID"); > + if (dev_uuid && !strcmp(dev_uuid, uuid)) { The partuuid comparison is case insensitive. Making UUID case-sensitive might be a bit surprising for users. > + outpath = udev_device_get_devnode(device); > + return device; > + } > + } else if (!strcmp(devtype, "partition")) { > + dev_uuid = udev_device_get_property_value(device, "ID_PART_ENTRY_UUID"); > + if (dev_uuid && !strcmp(dev_uuid, uuid)) { > + outpath = udev_device_get_devnode(device); > + return device; > + } > + } > + > + } > + return NULL; > +} > + > /* > * of_get_devicepath - get information how to access device corresponding to a device_node > * @partition_node: The device_node which shall be accessed > @@ -2443,11 +2489,29 @@ int of_get_devicepath(struct device_node *partition_node, char **devpath, off_t > if (!strcmp(node->name, "partitions")) > node = node->parent; > > - dev = of_find_device_by_node_path(node->full_name); > - if (!dev) { > - fprintf(stderr, "%s: cannot find device from node %s\n", __func__, > - node->full_name); > - return -ENODEV; > + if (of_device_is_compatible(node, "barebox,storage-by-uuid")) { > + const char *uuid; > + > + ret = of_property_read_string(node, "uuid", &uuid); > + if (ret) { > + fprintf(stderr, "%s: missing uuid property for %s\n", __func__, > + node->full_name); > + return -ENODEV; > + } > + dev = of_find_device_by_uuid(uuid); > + if (!dev) { > + fprintf(stderr, "%s: cannot find device for uuid %s\n", __func__, > + uuid); > + return -ENODEV; > + } > + } > + else { > + dev = of_find_device_by_node_path(node->full_name); > + if (!dev) { > + fprintf(stderr, "%s: cannot find device from node %s\n", __func__, > + node->full_name); > + return -ENODEV; > + } > } > > mtd = of_find_mtd_device(dev); -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |