From: Danilo Krummrich Date: Mon, 25 May 2026 01:23:22 +0000 (+0200) Subject: driver core: Guard deferred probe timeout extension with delayed_work_pending() X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=557495bc879013c3d5e21d667e987e7ce3a514de;p=thirdparty%2Flinux.git driver core: Guard deferred probe timeout extension with delayed_work_pending() mod_delayed_work() unconditionally queues the work even when it wasn't previously pending, which can fire the timeout prematurely or restart it after it already fired. Add a delayed_work_pending() guard to restore the originally intended semantics. Premature firing calls fw_devlink_drivers_done() before all built-in drivers have registered, causing fw_devlink to prematurely relax device links for suppliers whose drivers haven't loaded yet. Fixes: 1137838865bf ("driver core: Use mod_delayed_work to prevent lost deferred probe work") Tested-by: Geert Uytterhoeven Reviewed-by: Greg Kroah-Hartman Link: https://patch.msgid.link/20260525012340.3860581-2-dakr@kernel.org Signed-off-by: Danilo Krummrich --- diff --git a/drivers/base/dd.c b/drivers/base/dd.c index bebb43acc1327..905269ecef9b4 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -323,7 +323,8 @@ void deferred_probe_extend_timeout(void) * If the work hasn't been queued yet or if the work expired, don't * start a new one. */ - if (mod_delayed_work(system_wq, &deferred_probe_timeout_work, + if (delayed_work_pending(&deferred_probe_timeout_work) && + mod_delayed_work(system_wq, &deferred_probe_timeout_work, secs_to_jiffies(driver_deferred_probe_timeout))) pr_debug("Extended deferred probe timeout by %d secs\n", driver_deferred_probe_timeout);