Skip to content

Commit 75d70d7

Browse files
Thadeu Lima de Souza Cascardocminyard
Thadeu Lima de Souza Cascardo
authored andcommitted
ipmi: fix initialization when workqueue allocation fails
If the workqueue allocation fails, the driver is marked as not initialized, and timer and panic_notifier will be left registered. Instead of removing those when workqueue allocation fails, do the workqueue initialization before doing it, and cleanup srcu_struct if it fails. Fixes: 1d49eb9 ("ipmi: Move remove_work to dedicated workqueue") Signed-off-by: Thadeu Lima de Souza Cascardo <[email protected]> Cc: Corey Minyard <[email protected]> Cc: Ioanna Alifieraki <[email protected]> Cc: [email protected] Message-Id: <[email protected]> Signed-off-by: Corey Minyard <[email protected]>
1 parent 2b5160b commit 75d70d7

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

drivers/char/ipmi/ipmi_msghandler.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5396,20 +5396,23 @@ static int ipmi_init_msghandler(void)
53965396
if (rv)
53975397
goto out;
53985398

5399-
timer_setup(&ipmi_timer, ipmi_timeout, 0);
5400-
mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
5401-
5402-
atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
5403-
54045399
remove_work_wq = create_singlethread_workqueue("ipmi-msghandler-remove-wq");
54055400
if (!remove_work_wq) {
54065401
pr_err("unable to create ipmi-msghandler-remove-wq workqueue");
54075402
rv = -ENOMEM;
5408-
goto out;
5403+
goto out_wq;
54095404
}
54105405

5406+
timer_setup(&ipmi_timer, ipmi_timeout, 0);
5407+
mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
5408+
5409+
atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
5410+
54115411
initialized = true;
54125412

5413+
out_wq:
5414+
if (rv)
5415+
cleanup_srcu_struct(&ipmi_interfaces_srcu);
54135416
out:
54145417
mutex_unlock(&ipmi_interfaces_mutex);
54155418
return rv;

0 commit comments

Comments
 (0)