udev: propagate errors in udev_event_execute_rules()
And do not set initialized flag to the device.
This commit is contained in:
committed by
Zbigniew Jędrzejewski-Szmek
parent
7e95efb508
commit
99058cd66a
+22
-12
@@ -791,11 +791,11 @@ static int rename_netif(UdevEvent *event) {
|
||||
/* Set ID_RENAMING boolean property here, and drop it in the corresponding move uevent later. */
|
||||
r = device_add_property(dev, "ID_RENAMING", "1");
|
||||
if (r < 0)
|
||||
log_device_warning_errno(dev, r, "Failed to add 'ID_RENAMING' property: %m");
|
||||
return log_device_warning_errno(dev, r, "Failed to add 'ID_RENAMING' property: %m");
|
||||
|
||||
r = device_rename(dev, event->name);
|
||||
if (r < 0)
|
||||
log_device_warning_errno(dev, r, "Failed to update properties with new name '%s': %m", event->name);
|
||||
return log_device_warning_errno(dev, r, "Failed to update properties with new name '%s': %m", event->name);
|
||||
|
||||
log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, oldname, event->name);
|
||||
|
||||
@@ -898,7 +898,7 @@ static int udev_event_on_move(UdevEvent *event) {
|
||||
/* Drop previously added property */
|
||||
r = device_add_property(dev, "ID_RENAMING", NULL);
|
||||
if (r < 0)
|
||||
return log_device_debug_errno(dev, r, "Failed to remove 'ID_RENAMING' property, ignoring: %m");
|
||||
return log_device_debug_errno(dev, r, "Failed to remove 'ID_RENAMING' property: %m");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -932,33 +932,43 @@ int udev_event_execute_rules(UdevEvent *event,
|
||||
|
||||
r = device_clone_with_db(dev, &event->dev_db_clone);
|
||||
if (r < 0)
|
||||
log_device_debug_errno(dev, r, "Failed to clone sd_device object, ignoring: %m");
|
||||
return log_device_debug_errno(dev, r, "Failed to clone sd_device object: %m");
|
||||
|
||||
if (event->dev_db_clone && sd_device_get_devnum(dev, NULL) >= 0)
|
||||
/* Disable watch during event processing. */
|
||||
(void) udev_watch_end(event->dev_db_clone);
|
||||
|
||||
if (action == DEVICE_ACTION_MOVE)
|
||||
(void) udev_event_on_move(event);
|
||||
if (action == DEVICE_ACTION_MOVE) {
|
||||
r = udev_event_on_move(event);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
(void) udev_rules_apply_to_event(rules, event, timeout_usec, properties_list);
|
||||
r = udev_rules_apply_to_event(rules, event, timeout_usec, properties_list);
|
||||
if (r < 0)
|
||||
return log_device_debug_errno(dev, r, "Failed to apply udev rules: %m");
|
||||
|
||||
(void) rename_netif(event);
|
||||
(void) update_devnode(event);
|
||||
r = rename_netif(event);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = update_devnode(event);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* preserve old, or get new initialization timestamp */
|
||||
r = device_ensure_usec_initialized(dev, event->dev_db_clone);
|
||||
if (r < 0)
|
||||
log_device_debug_errno(dev, r, "Failed to set initialization timestamp, ignoring: %m");
|
||||
return log_device_debug_errno(dev, r, "Failed to set initialization timestamp: %m");
|
||||
|
||||
/* (re)write database file */
|
||||
r = device_tag_index(dev, event->dev_db_clone, true);
|
||||
if (r < 0)
|
||||
log_device_debug_errno(dev, r, "Failed to update tags under /run/udev/tag/, ignoring: %m");
|
||||
return log_device_debug_errno(dev, r, "Failed to update tags under /run/udev/tag/: %m");
|
||||
|
||||
r = device_update_db(dev);
|
||||
if (r < 0)
|
||||
log_device_debug_errno(dev, r, "Failed to update database under /run/udev/data/, ignoring: %m");
|
||||
return log_device_debug_errno(dev, r, "Failed to update database under /run/udev/data/: %m");
|
||||
|
||||
device_set_is_initialized(dev);
|
||||
|
||||
|
||||
+4
-1
@@ -414,7 +414,10 @@ static int worker_process_device(Manager *manager, sd_device *dev) {
|
||||
return r;
|
||||
|
||||
/* apply rules, create node, symlinks */
|
||||
udev_event_execute_rules(udev_event, arg_event_timeout_usec, manager->properties, manager->rules);
|
||||
r = udev_event_execute_rules(udev_event, arg_event_timeout_usec, manager->properties, manager->rules);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
udev_event_execute_run(udev_event, arg_event_timeout_usec);
|
||||
|
||||
if (!manager->rtnl)
|
||||
|
||||
Reference in New Issue
Block a user