572a44
From 7f3f1b3f979a96182b2eb44eeea86993506108d5 Mon Sep 17 00:00:00 2001
572a44
From: =?UTF-8?q?=C5=81ukasz=20Stelmach?= <l.stelmach@samsung.com>
572a44
Date: Tue, 7 Jan 2014 15:00:22 +0100
572a44
Subject: [PATCH] gpt-auto-generator: skip nonexistent devices
572a44
572a44
The devices we work with have eMMC chips for storage. The chips
572a44
provide four "hardware" partitions.  The first is /dev/mmcblk0, it
572a44
takes almost whole space and holds a GPT with several real partitions
572a44
(/dev/mmcblk0p?). Then there are three block devices (mmcblk0boot0,
572a44
mmcblk0boot1, rpmb) that are part of the same hardware as mmcblk0 that
572a44
are presented by the kernel as children of the latter. That relationship
572a44
makes gpt-auto-generator try to peek them but since they are not GPT
572a44
partitions blkid_do_safeprobe() returns -2 making verify_gpt_parition()
572a44
function return -ENODEV.
572a44
---
572a44
 src/gpt-auto-generator/gpt-auto-generator.c | 3 +++
572a44
 1 file changed, 3 insertions(+)
572a44
572a44
diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
572a44
index d2b4213..1f09aed 100644
572a44
--- a/src/gpt-auto-generator/gpt-auto-generator.c
572a44
+++ b/src/gpt-auto-generator/gpt-auto-generator.c
572a44
@@ -306,6 +306,9 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) {
572a44
 
572a44
                 r = verify_gpt_partition(node, &type_id, &nr, &fstype);
572a44
                 if (r < 0) {
572a44
+                        /* skip child devices which are not detected properly */
572a44
+                        if (r == -ENODEV)
572a44
+                                continue;
572a44
                         log_error("Failed to verify GPT partition %s: %s",
572a44
                                   node, strerror(-r));
572a44
                         udev_device_unref(q);