udev: do not re-create database on remove event

Fixes a bug introduced by f6bda694f9 (v256).

With the offending commit, on remove event, database file for a device is once
removed in event_execute_rules_on_remove(), but later re-created here.
This fixes the issue, and makes the database file not re-created on remove event.
This commit is contained in:
Yu Watanabe
2024-10-15 06:32:39 +09:00
parent 709fdcc75a
commit 5b2dce150d
+12 -7
View File
@@ -200,26 +200,31 @@ static int worker_process_device(UdevWorker *worker, sd_device *dev) {
if (r < 0)
return r;
/* Process RUN=. */
udev_event_execute_run(udev_event);
if (!worker->rtnl)
/* in case rtnl was initialized */
worker->rtnl = sd_netlink_ref(udev_event->rtnl);
/* Enable watch if requested. */
if (udev_event->inotify_watch) {
r = udev_watch_begin(worker->inotify_fd, dev);
if (r < 0 && r != -ENOENT) /* The device may be already removed, ignore -ENOENT. */
log_device_warning_errno(dev, r, "Failed to add inotify watch, ignoring: %m");
}
/* Finalize database. */
r = device_add_property(dev, "ID_PROCESSING", NULL);
if (r < 0)
return log_device_warning_errno(dev, r, "Failed to remove 'ID_PROCESSING' property: %m");
/* Finalize database. But do not re-create database on remove, which has been already removed in
* event_execute_rules_on_remove(). */
if (!device_for_action(dev, SD_DEVICE_REMOVE)) {
r = device_add_property(dev, "ID_PROCESSING", NULL);
if (r < 0)
return log_device_warning_errno(dev, r, "Failed to remove '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");
r = device_update_db(dev);
if (r < 0)
return log_device_warning_errno(dev, r, "Failed to update database under /run/udev/data/: %m");
}
log_device_uevent(dev, "Device processed");
return 0;