return 0;
}
-static int validate_node(const char *node, sd_device **ret) {
- _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
+void device_found_node(Manager *m, const char *node, DeviceFound found, DeviceFound mask) {
int r;
- assert(node);
- assert(ret);
-
- /* Validates a device node that showed up in /proc/swaps or /proc/self/mountinfo if it makes sense for us to
- * track. Note that this validator is fine within missing device nodes, but not with badly set up ones! */
-
- r = sd_device_new_from_devname(&dev, node);
- if (r == -ENODEV) {
- *ret = NULL;
- return 0; /* good! (though missing) */
- }
- if (r < 0)
- return r; /* bad! */
-
- *ret = TAKE_PTR(dev);
- return 1; /* good! */
-}
-
-void device_found_node(Manager *m, const char *node, DeviceFound found, DeviceFound mask) {
assert(m);
assert(node);
assert(!FLAGS_SET(mask, DEVICE_FOUND_UDEV));
/* If the device is known in the kernel and newly appeared, then we'll create a device unit for it,
* under the name referenced in /proc/swaps or /proc/self/mountinfo. But first, let's validate if
- * everything is alright with the device node. */
-
- if (validate_node(node, &dev) < 0)
- return; /* Don't create a device unit for this if the device node is borked. */
+ * everything is alright with the device node. Note that we're fine with missing device nodes,
+ * but not with badly set up ones. */
+
+ r = sd_device_new_from_devname(&dev, node);
+ if (r == -ENODEV)
+ log_debug("Could not find device for %s, continuing without device node", node);
+ else if (r < 0) {
+ /* Reduce log noise from nodes which are not device nodes by skipping EINVAL. */
+ if (r != -EINVAL)
+ log_error_errno(r, "Failed to open %s device, ignoring: %m", node);
+ return;
+ }
(void) device_setup_unit(m, dev, node, false); /* 'dev' may be NULL. */
}