]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: store action in struct Event
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 24 Mar 2022 17:39:55 +0000 (02:39 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 25 Mar 2022 01:25:27 +0000 (10:25 +0900)
src/udev/udevd.c

index 53728c9f797140cc9f1417fbcc0456248109a90f..d153b03a38e13f66d245347c6920ef9d8fe1a8e2 100644 (file)
@@ -125,6 +125,7 @@ typedef struct Event {
 
         sd_device *dev;
 
+        sd_device_action_t action;
         uint64_t seqnum;
         uint64_t blocker_seqnum;
 
@@ -964,16 +965,12 @@ static int event_queue_start(Manager *manager) {
                 r = event_is_blocked(event);
                 if (r > 0)
                         continue;
-                if (r < 0) {
-                        sd_device_action_t a = _SD_DEVICE_ACTION_INVALID;
-
-                        (void) sd_device_get_action(event->dev, &a);
+                if (r < 0)
                         log_device_warning_errno(event->dev, r,
                                                  "Failed to check dependencies for event (SEQNUM=%"PRIu64", ACTION=%s), "
                                                  "assuming there is no blocking event, ignoring: %m",
                                                  event->seqnum,
-                                                 strna(device_action_to_string(a)));
-                }
+                                                 strna(device_action_to_string(event->action)));
 
                 r = event_run(event);
                 if (r <= 0) /* 0 means there are no idle workers. Let's escape from the loop. */
@@ -984,6 +981,7 @@ static int event_queue_start(Manager *manager) {
 }
 
 static int event_queue_insert(Manager *manager, sd_device *dev) {
+        sd_device_action_t action;
         uint64_t seqnum;
         Event *event;
         int r;
@@ -999,6 +997,10 @@ static int event_queue_insert(Manager *manager, sd_device *dev) {
         if (r < 0)
                 return r;
 
+        r = sd_device_get_action(dev, &action);
+        if (r < 0)
+                return r;
+
         event = new(Event, 1);
         if (!event)
                 return -ENOMEM;
@@ -1007,6 +1009,7 @@ static int event_queue_insert(Manager *manager, sd_device *dev) {
                 .manager = manager,
                 .dev = sd_device_ref(dev),
                 .seqnum = seqnum,
+                .action = action,
                 .state = EVENT_QUEUED,
         };