1
0
mirror of https://github.com/systemd/systemd.git synced 2025-05-27 21:05:55 +03:00

udev: do not re-create database on remove event

Fixes a bug introduced by f6bda694f908cc227b002570b893029aa4c9e173 (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.

(cherry picked from commit 5b2dce150d5eadcd33d620e095c9c1e2de51dd24)
This commit is contained in:
Yu Watanabe 2024-10-14 00:55:43 +09:00 committed by Luca Boccassi
parent dc44fd69b0
commit b2ce8fa2f1

View File

@ -206,26 +206,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;