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:
parent
dc44fd69b0
commit
b2ce8fa2f1
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user