From: Yu Watanabe Date: Thu, 28 Mar 2024 05:49:28 +0000 (+0900) Subject: udev-event: split out update_clone() X-Git-Tag: v256-rc1~359^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a7541703b90b084bd2f57e6f29cf9abcdb771396;p=thirdparty%2Fsystemd.git udev-event: split out update_clone() No functional change, preparation for later commits. --- 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);