]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
RDS: IB: Destroy aux_wq if rds_ib_init() fails
authorAvinash Repaka <avinash.repaka@oracle.com>
Thu, 31 Aug 2017 21:37:42 +0000 (14:37 -0700)
committerChuck Anderson <chuck.anderson@oracle.com>
Wed, 13 Sep 2017 04:27:04 +0000 (21:27 -0700)
This patch destroys rds_aux_wq in rds_ib_init() error path to avoid
memory leak. Since destroy_workqueue() waits on pending work to be done,
we can remove flush_workqueue() prior to destroying.

Orabug: 26732887

Signed-off-by: Avinash Repaka <avinash.repaka@oracle.com>
Reviewed-by: Gerd Rausch <gerd.rausch@oracle.com>
Reviewed-by: HÃ¥kon Bugge <haakon.bugge@oracle.com>
net/rds/ib.c

index 35dac3bfee74bd8c07ae8eb2cdd5b59691e75d59..e84143bbf62d2f420dd3339b704f90ac0d15937e 100644 (file)
@@ -2707,14 +2707,14 @@ int rds_ib_init(void)
 
        ret = rds_trans_register(&rds_ib_transport);
        if (ret)
-               goto out_ibreg;
+               goto out_aux_wq;
 
        rds_info_register_func(RDS_INFO_IB_CONNECTIONS, rds_ib_ic_info);
 
        ret = rds_ip_threads_init();
        if (ret) {
                printk(KERN_ERR "RDS: failed to create IP thread\n");
-               goto out_ibreg;
+               goto out_aux_wq;
        }
 
        rds_ib_ip_excl_ips_init();
@@ -2733,6 +2733,8 @@ int rds_ib_init(void)
 
 out_ip_thread:
        rds_ip_thread_exit();
+out_aux_wq:
+       destroy_workqueue(rds_aux_wq);
 out_ibreg:
        rds_ib_unregister_client();
 out_recv:
@@ -2754,7 +2756,6 @@ void rds_ib_exit(void)
        rds_ib_destroy_nodev_conns();
        rds_ib_sysctl_exit();
        rds_ib_recv_exit();
-       flush_workqueue(rds_aux_wq);
        destroy_workqueue(rds_aux_wq);
        rds_trans_unregister(&rds_ib_transport);
        rds_ib_fmr_exit();