1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-30 14:55:37 +03:00

core/device: Log if we fail to open a device

We also shorten the logic by getting rid of the validate_node()
function. An extra check is added to verify we're dealing with
a device before calling sd_device_new_from_devname() since that
will return -EINVAL if anything other than a device is passed.
This commit is contained in:
Daan De Meyer 2022-05-07 15:18:32 +02:00
parent 6cc4da5eb5
commit e9222bfcfa

View File

@ -948,29 +948,9 @@ static int device_dispatch_io(sd_device_monitor *monitor, sd_device *dev, void *
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));
@ -994,10 +974,18 @@ void device_found_node(Manager *m, const char *node, DeviceFound found, DeviceFo
/* 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. */
* everything is alright with the device node. Note that we're fine with missing device nodes,
* but not with badly set up ones. */
if (validate_node(node, &dev) < 0)
return; /* Don't create a device unit for this if the device node is borked. */
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. */
}