From: Harish Chegondi <harish.chego...@intel.com>

Currently, if hfi1_register_ib_device() call is unsuccessful, workqueues
are not being destroyed before bailing out. This patch fixes this issue.

Reviewed-by: Dennis Dalessandro <dennis.dalessan...@intel.com>
Signed-off-by: Harish Chegondi <harish.chego...@intel.com>
Signed-off-by: Jubin John <jubin.j...@intel.com>
---
Changes in v2:
        - No changes

 drivers/staging/rdma/hfi1/init.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/rdma/hfi1/init.c b/drivers/staging/rdma/hfi1/init.c
index 1c8286f..f9d9dc1 100644
--- a/drivers/staging/rdma/hfi1/init.c
+++ b/drivers/staging/rdma/hfi1/init.c
@@ -1336,6 +1336,7 @@ static int init_one(struct pci_dev *pdev, const struct 
pci_device_id *ent)
 {
        int ret = 0, j, pidx, initfail;
        struct hfi1_devdata *dd = NULL;
+       struct hfi1_pportdata *ppd;
 
        /* First, lock the non-writable module parameters */
        HFI1_CAP_LOCK();
@@ -1431,8 +1432,14 @@ static int init_one(struct pci_dev *pdev, const struct 
pci_device_id *ent)
        if (initfail || ret) {
                stop_timers(dd);
                flush_workqueue(ib_wq);
-               for (pidx = 0; pidx < dd->num_pports; ++pidx)
+               for (pidx = 0; pidx < dd->num_pports; ++pidx) {
                        hfi1_quiet_serdes(dd->pport + pidx);
+                       ppd = dd->pport + pidx;
+                       if (ppd->hfi1_wq) {
+                               destroy_workqueue(ppd->hfi1_wq);
+                               ppd->hfi1_wq = NULL;
+                       }
+               }
                if (!j)
                        hfi1_device_remove(dd);
                if (!ret)
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to