From a7541703b90b084bd2f57e6f29cf9abcdb771396 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 28 Mar 2024 14:49:28 +0900 Subject: [PATCH] udev-event: split out update_clone() No functional change, preparation for later commits. --- src/udev/udev-event.c | 48 +++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 4541b0e0fb1..68c7fed8a1f 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -324,6 +324,34 @@ static int copy_all_tags(sd_device *d, sd_device *s) { return 0; } +static int update_clone(UdevEvent *event) { + sd_device *dev = ASSERT_PTR(ASSERT_PTR(event)->dev_db_clone); + int r; + + /* Drop previously added property for safety to make IMPORT{db}="ID_RENAMING" not work. This is + * mostly for 'move' uevent, but let's do unconditionally. Why? If a network interface is renamed in + * initrd, then udevd may lose the 'move' uevent during switching root. Usually, we do not set the + * persistent flag for network interfaces, but user may set it. Just for safety. */ + + r = device_add_property(dev, "ID_RENAMING", NULL); + if (r < 0) + return log_device_debug_errno(dev, r, "Failed to remove 'ID_RENAMING' property: %m"); + + /* If the database file already exists, append ID_PROCESSING property to the existing database, + * to indicate that the device is being processed by udevd. */ + if (device_has_db(dev) > 0) { + r = device_add_property(dev, "ID_PROCESSING", "1"); + if (r < 0) + return log_device_warning_errno(dev, r, "Failed to add 'ID_PROCESSING' property: %m"); + + r = device_update_db(dev); + if (r < 0) + return log_device_warning_errno(dev, r, "Failed to update database under /run/udev/data/: %m"); + } + + return 0; +} + int udev_event_execute_rules(UdevEvent *event, UdevRules *rules) { sd_device_action_t action; sd_device *dev; @@ -347,25 +375,9 @@ int udev_event_execute_rules(UdevEvent *event, UdevRules *rules) { if (r < 0) log_device_warning_errno(dev, r, "Failed to copy all tags from old database entry, ignoring: %m"); - /* Drop previously added property for safety to make IMPORT{db}="ID_RENAMING" not work. This is - * mostly for 'move' uevent, but let's do unconditionally. Why? If a network interface is renamed in - * initrd, then udevd may lose the 'move' uevent during switching root. Usually, we do not set the - * persistent flag for network interfaces, but user may set it. Just for safety. */ - r = device_add_property(event->dev_db_clone, "ID_RENAMING", NULL); + r = update_clone(event); if (r < 0) - return log_device_debug_errno(dev, r, "Failed to remove 'ID_RENAMING' property: %m"); - - /* If the database file already exists, append ID_PROCESSING property to the existing database, - * to indicate that the device is being processed by udevd. */ - if (device_has_db(event->dev_db_clone) > 0) { - r = device_add_property(event->dev_db_clone, "ID_PROCESSING", "1"); - if (r < 0) - return log_device_warning_errno(event->dev_db_clone, r, "Failed to add 'ID_PROCESSING' property: %m"); - - r = device_update_db(event->dev_db_clone); - if (r < 0) - return log_device_warning_errno(event->dev_db_clone, r, "Failed to update database under /run/udev/data/: %m"); - } + return r; DEVICE_TRACE_POINT(rules_start, dev); -- 2.47.3