+ blkid_probe_enable_partitions(b, 1);
+ blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS);
+
+ errno = 0;
+ r = blkid_do_safeprobe(b);
+ if (r == -2 || r == 1) /* no result or uncertain */
+ return 0;
+ else if (r != 0) {
+ if (errno == 0)
+ errno = EIO;
+ log_error_errno(errno, "Failed to probe %s: %m", node);
+ return -errno;
+ }
+
+ errno = 0;
+ r = blkid_probe_lookup_value(b, "PTTYPE", &pttype, NULL);
+ if (r != 0) {
+ if (errno == 0)
+ errno = EIO;
+ log_error_errno(errno, "Failed to determine partition table type of %s: %m", node);
+ return -errno;
+ }
+
+ /* We only do this all for GPT... */
+ if (!streq_ptr(pttype, "gpt")) {
+ log_debug("Not a GPT partition table, ignoring.");
+ return 0;
+ }
+
+ errno = 0;
+ pl = blkid_probe_get_partitions(b);
+ if (!pl) {
+ if (errno == 0)
+ return log_oom();
+
+ log_error_errno(errno, "Failed to list partitions of %s: %m", node);
+ return -errno;
+ }
+
+ e = udev_enumerate_new(udev);
+ if (!e)
+ return log_oom();
+
+ r = udev_enumerate_add_match_parent(e, parent);
+ if (r < 0)
+ return log_oom();
+
+ r = udev_enumerate_add_match_subsystem(e, "block");
+ if (r < 0)
+ return log_oom();
+
+ r = udev_enumerate_scan_devices(e);
+ if (r < 0)
+ return log_error_errno(r, "Failed to enumerate partitions on %s: %m", node);
+