Now wait_for_device_probe() waits for currently executing probes to finish, but it doesn't take into account deferred probing mechanism. As result, nothing prevents deferred probe workqueue to continue probing devices right after wait_for_device_probe() is finished.
Hence, lest ensure deferred probe workqueue is finished in wait_for_device_probe() before proceeding. Cc: Alan Stern <[email protected]> Cc: Rafael J. Wysocki <[email protected]> Cc: Thierry Reding <[email protected]> Signed-off-by: Grygorii Strashko <[email protected]> --- drivers/base/dd.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/base/dd.c b/drivers/base/dd.c index be0eb46..98de1a5 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -391,6 +391,10 @@ int driver_probe_done(void) */ void wait_for_device_probe(void) { + /* wait for the deferred probe workqueue to finish */ + if (driver_deferred_probe_enable) + flush_workqueue(deferred_wq); + /* wait for the known devices to complete their probing */ wait_event(probe_waitqueue, atomic_read(&probe_count) == 0); async_synchronize_full(); -- 2.5.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

