]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/device: removed devices are not ready
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 1 Sep 2022 00:02:39 +0000 (09:02 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 20 Sep 2022 18:12:12 +0000 (03:12 +0900)
src/core/device.c

index 14862d949439b2d77d9b5627115274566d851987..b7fbf8a8e6fa5bb23794687a90e887b747918de8 100644 (file)
@@ -692,6 +692,9 @@ static bool device_is_ready(sd_device *dev) {
 
         assert(dev);
 
+        if (device_for_action(dev, SD_DEVICE_REMOVE))
+                return false;
+
         r = device_is_renaming(dev);
         if (r < 0)
                 log_device_warning_errno(dev, r, "Failed to check if device is renaming, assuming device is not renaming: %m");
@@ -1103,18 +1106,16 @@ static int device_dispatch_io(sd_device_monitor *monitor, sd_device *dev, void *
         /* A change event can signal that a device is becoming ready, in particular if the device is using
          * the SYSTEMD_READY logic in udev so we need to reach the else block of the following if, even for
          * change events */
+        ready = device_is_ready(dev);
+
         if (action == SD_DEVICE_REMOVE) {
                 r = swap_process_device_remove(m, dev);
                 if (r < 0)
                         log_device_warning_errno(dev, r, "Failed to process swap device remove event, ignoring: %m");
 
-                ready = false;
-
                 (void) device_setup_devlink_units_on_remove(m, dev, &ready_devlinks);
 
         } else {
-                ready = device_is_ready(dev);
-
                 if (ready) {
                         device_process_new(m, dev, sysfs);