nes: handling failed allocation when creating workqueue
authorInsu Yun <wuninsu@gmail.com>
Wed, 17 Feb 2016 18:06:33 +0000 (13:06 -0500)
committerDoug Ledford <dledford@redhat.com>
Mon, 29 Feb 2016 22:11:57 +0000 (17:11 -0500)
Since create_singlethread_workqueue uses kzalloc internally,
it can fail when the system is under memory pressure, so need
to handle it.

Signed-off-by: Insu Yun <wuninsu@gmail.com>
Reviewed-by: Leon Romanovsky <leon@leon.nu>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/nes/nes_cm.c

index cb9f0f27308de0dd439844cc06742a74caa52899..e3fc2a14904cc57b89bbb54ca89e4771d13bd84c 100644 (file)
@@ -2856,12 +2856,22 @@ static struct nes_cm_core *nes_cm_alloc_core(void)
 
        nes_debug(NES_DBG_CM, "Enable QUEUE EVENTS\n");
        cm_core->event_wq = create_singlethread_workqueue("nesewq");
+       if (!cm_core->event_wq)
+               goto out_free_cmcore;
        cm_core->post_event = nes_cm_post_event;
        nes_debug(NES_DBG_CM, "Enable QUEUE DISCONNECTS\n");
        cm_core->disconn_wq = create_singlethread_workqueue("nesdwq");
+       if (!cm_core->disconn_wq)
+               goto out_free_wq;
 
        print_core(cm_core);
        return cm_core;
+
+out_free_wq:
+       destroy_workqueue(cm_core->event_wq);
+out_free_cmcore:
+       kfree(cm_core);
+       return NULL;
 }