]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev-util: make device_wait_for_initialization() take relative timeout
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 31 Aug 2022 13:17:12 +0000 (22:17 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 31 Aug 2022 14:12:46 +0000 (23:12 +0900)
Also make the timer event source floating.

src/shared/dissect-image.c
src/shared/udev-util.c
src/shared/udev-util.h
src/udev/udevadm-info.c

index 87712abfb3bcb005ee74972be2f4c12244b847b9..30a10f9239e11b3218e253e7ae1e3a52d5b74b34 100644 (file)
@@ -2057,7 +2057,7 @@ static int verity_partition(
                         if (r == 0) {
                                 /* devmapper might say that the device exists, but the devlink might not yet have been
                                  * created. Check and wait for the udev event in that case. */
-                                r = device_wait_for_devlink(node, "block", usec_add(now(CLOCK_MONOTONIC), 100 * USEC_PER_MSEC), NULL);
+                                r = device_wait_for_devlink(node, "block", 100 * USEC_PER_MSEC, NULL);
                                 /* Fallback to activation with a unique device if it's taking too long */
                                 if (r == -ETIMEDOUT)
                                         break;
index e47c44f7a8f2128a43097e068be1bd4fba356447..db3161b5ceaf59255a04747f8878a1e8d7e4c417 100644 (file)
@@ -185,11 +185,10 @@ static int device_wait_for_initialization_internal(
                 sd_device *_device,
                 const char *devlink,
                 const char *subsystem,
-                usec_t deadline,
+                usec_t timeout_usec,
                 sd_device **ret) {
 
         _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor = NULL;
-        _cleanup_(sd_event_source_unrefp) sd_event_source *timeout_source = NULL;
         _cleanup_(sd_event_unrefp) sd_event *event = NULL;
         /* Ensure that if !_device && devlink, device gets unrefd on errors since it will be new */
         _cleanup_(sd_device_unrefp) sd_device *device = sd_device_ref(_device);
@@ -247,17 +246,16 @@ static int device_wait_for_initialization_internal(
         if (r < 0)
                 return log_error_errno(r, "Failed to start device monitor: %m");
 
-        if (deadline != USEC_INFINITY) {
-                r = sd_event_add_time(
-                                event, &timeout_source,
-                                CLOCK_MONOTONIC, deadline, 0,
+        if (timeout_usec != USEC_INFINITY) {
+                r = sd_event_add_time_relative(
+                                event, NULL,
+                                CLOCK_MONOTONIC, timeout_usec, 0,
                                 NULL, INT_TO_PTR(-ETIMEDOUT));
                 if (r < 0)
                         return log_error_errno(r, "Failed to add timeout event source: %m");
         }
 
-        /* Check again, maybe things changed. Udev will re-read the db if the device wasn't initialized
-         * yet. */
+        /* Check again, maybe things changed. Udev will re-read the db if the device wasn't initialized yet. */
         if (!device && devlink) {
                 r = sd_device_new_from_devname(&device, devlink);
                 if (r < 0 && !ERRNO_IS_DEVICE_ABSENT(r))
@@ -278,12 +276,12 @@ static int device_wait_for_initialization_internal(
         return 0;
 }
 
-int device_wait_for_initialization(sd_device *device, const char *subsystem, usec_t deadline, sd_device **ret) {
-        return device_wait_for_initialization_internal(device, NULL, subsystem, deadline, ret);
+int device_wait_for_initialization(sd_device *device, const char *subsystem, usec_t timeout_usec, sd_device **ret) {
+        return device_wait_for_initialization_internal(device, NULL, subsystem, timeout_usec, ret);
 }
 
-int device_wait_for_devlink(const char *devlink, const char *subsystem, usec_t deadline, sd_device **ret) {
-        return device_wait_for_initialization_internal(NULL, devlink, subsystem, deadline, ret);
+int device_wait_for_devlink(const char *devlink, const char *subsystem, usec_t timeout_usec, sd_device **ret) {
+        return device_wait_for_initialization_internal(NULL, devlink, subsystem, timeout_usec, ret);
 }
 
 int device_is_renaming(sd_device *dev) {
index 43a1b846f48cd4487bf1b1fcb3b601e62fb05b3c..c3c3dbe842a976fb801beb679d722e17d51b0bb4 100644 (file)
@@ -36,8 +36,8 @@ static inline int udev_parse_config(void) {
         return udev_parse_config_full(NULL, NULL, NULL, NULL, NULL);
 }
 
-int device_wait_for_initialization(sd_device *device, const char *subsystem, usec_t deadline, sd_device **ret);
-int device_wait_for_devlink(const char *path, const char *subsystem, usec_t deadline, sd_device **ret);
+int device_wait_for_initialization(sd_device *device, const char *subsystem, usec_t timeout_usec, sd_device **ret);
+int device_wait_for_devlink(const char *path, const char *subsystem, usec_t timeout_usec, sd_device **ret);
 int device_is_renaming(sd_device *dev);
 
 bool device_for_action(sd_device *dev, sd_device_action_t action);
index 04baed2e0c1c3c37bf4d071e4335e8b3777e08b8..fccc967a47b0fdc77478fb34a1a856072294275a 100644 (file)
@@ -846,7 +846,7 @@ int info_main(int argc, char *argv[], void *userdata) {
                         r = device_wait_for_initialization(
                                         device,
                                         NULL,
-                                        usec_add(now(CLOCK_MONOTONIC), arg_wait_for_initialization_timeout),
+                                        arg_wait_for_initialization_timeout,
                                         &d);
                         if (r < 0)
                                 return r;