Re: [PATCH 2/2] driver core: Guard deferred probe timeout extension with delayed_work_pending()
From: Greg KH
Date: Mon May 25 2026 - 02:02:56 EST
On Mon, May 25, 2026 at 03:23:22AM +0200, Danilo Krummrich wrote:
> 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")
> Signed-off-by: Danilo Krummrich <dakr@xxxxxxxxxx>
> ---
> drivers/base/dd.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/base/dd.c b/drivers/base/dd.c
> index bebb43acc132..905269ecef9b 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);
> --
> 2.54.0
>
>
Reviewed-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>