+ path = udev_device_get_devpath(dev);
+ if (path && (strstr(path, "virtual/block/loop")
+ || strstr(path, "virtual/block/ram"))) {
+ pb_debug("SKIP: %s: ignored (path=%s)\n", name, path);
+ return 0;
+ }
+
+ /* We have enough info to create the device and start discovery */
+ ddev = device_lookup_by_id(udev->handler, name);
+ if (ddev) {
+ pb_debug("device %s is already present?\n", name);
+ return -1;
+ }
+
+ /* we may also see multipath devices; same dev nodes (hence id), but
+ * different serial numbers */
+ serial = udev_device_get_property_value(dev, "ID_SERIAL");
+ if (serial && device_lookup_by_serial(udev->handler, serial))
+ return -1;
+
+ ddev = discover_device_create(udev->handler, name);
+
+ ddev->device_path = udev_device_get_devnode(dev);
+ prop = udev_device_get_property_value(dev, "ID_FS_UUID");
+ if (prop)
+ ddev->uuid = talloc_strdup(ddev, prop);
+ prop = udev_device_get_property_value(dev, "ID_FS_LABEL");
+ if (prop)
+ ddev->label = talloc_strdup(ddev, prop);
+ ddev->device->type = DEVICE_TYPE_DISK;
+
+ udev_setup_device_params(dev, ddev);
+
+ device_handler_discover(udev->handler, ddev);
+
+ return 0;