From: Yu Watanabe Date: Thu, 1 Sep 2022 00:02:39 +0000 (+0900) Subject: core/device: removed devices are not ready X-Git-Tag: v252-rc1~125^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1cb89339bcf44d910931655c689d23b752dc8cce;p=thirdparty%2Fsystemd.git core/device: removed devices are not ready --- diff --git a/src/core/device.c b/src/core/device.c index 14862d94943..b7fbf8a8e6f 100644 --- a/src/core/device.c +++ b/src/core/device.c @@ -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);