]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: drop unnecessary clone of received sd-device object
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 24 Mar 2022 16:13:39 +0000 (01:13 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 25 Mar 2022 01:25:26 +0000 (10:25 +0900)
As the sd-device object received through sd-device-monitor is sealed,
so the corresponding udev database or uevent file will not be read.

src/udev/udevd.c

index 108142e9c61919f86064b1146acac5d3b62e41cc..05397df7a4292559ac788610a5db2d6b2b8da842 100644 (file)
@@ -124,7 +124,6 @@ typedef struct Event {
         EventState state;
 
         sd_device *dev;
-        sd_device *dev_kernel; /* clone of originally received device */
 
         uint64_t seqnum;
         uint64_t blocker_seqnum;
@@ -163,7 +162,6 @@ static Event *event_free(Event *event) {
 
         LIST_REMOVE(event, event->manager->events, event);
         sd_device_unref(event->dev);
-        sd_device_unref(event->dev_kernel);
 
         sd_event_source_disable_unref(event->timeout_warning_event);
         sd_event_source_disable_unref(event->timeout_event);
@@ -973,9 +971,8 @@ static int event_queue_start(Manager *manager) {
 }
 
 static int event_queue_insert(Manager *manager, sd_device *dev) {
-        _cleanup_(sd_device_unrefp) sd_device *clone = NULL;
-        Event *event;
         uint64_t seqnum;
+        Event *event;
         int r;
 
         assert(manager);
@@ -989,15 +986,6 @@ static int event_queue_insert(Manager *manager, sd_device *dev) {
         if (r < 0)
                 return r;
 
-        /* Save original device to restore the state on failures. */
-        r = device_shallow_clone(dev, &clone);
-        if (r < 0)
-                return r;
-
-        r = device_copy_properties(clone, dev);
-        if (r < 0)
-                return r;
-
         event = new(Event, 1);
         if (!event)
                 return -ENOMEM;
@@ -1005,7 +993,6 @@ static int event_queue_insert(Manager *manager, sd_device *dev) {
         *event = (Event) {
                 .manager = manager,
                 .dev = sd_device_ref(dev),
-                .dev_kernel = TAKE_PTR(clone),
                 .seqnum = seqnum,
                 .state = EVENT_QUEUED,
         };
@@ -1440,10 +1427,10 @@ static int on_sigchld(sd_event_source *s, const struct signalfd_siginfo *si, voi
                         device_tag_index(worker->event->dev, NULL, false);
 
                         if (manager->monitor) {
-                                /* Forward kernel event unchanged */
-                                r = device_monitor_send_device(manager->monitor, NULL, worker->event->dev_kernel);
+                                /* Forward kernel event to libudev listeners */
+                                r = device_monitor_send_device(manager->monitor, NULL, worker->event->dev);
                                 if (r < 0)
-                                        log_device_warning_errno(worker->event->dev_kernel, r,
+                                        log_device_warning_errno(worker->event->dev, r,
                                                                  "Failed to broadcast failed event to libudev listeners, ignoring: %m");
                         }
                 }