Browse Source

RDMA/bnxt_re: Fix the ib_reg failure cleanup

Release the netdev references in the cleanup path.  Invokes the cleanup
routines if bnxt_re_ib_reg fails.

Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Selvin Xavier 7 years ago
parent
commit
497158aa5f
1 changed files with 4 additions and 1 deletions
  1. 4 1
      drivers/infiniband/hw/bnxt_re/main.c

+ 4 - 1
drivers/infiniband/hw/bnxt_re/main.c

@@ -1416,9 +1416,12 @@ static void bnxt_re_task(struct work_struct *work)
 	switch (re_work->event) {
 	switch (re_work->event) {
 	case NETDEV_REGISTER:
 	case NETDEV_REGISTER:
 		rc = bnxt_re_ib_reg(rdev);
 		rc = bnxt_re_ib_reg(rdev);
-		if (rc)
+		if (rc) {
 			dev_err(rdev_to_dev(rdev),
 			dev_err(rdev_to_dev(rdev),
 				"Failed to register with IB: %#x", rc);
 				"Failed to register with IB: %#x", rc);
+			bnxt_re_remove_one(rdev);
+			bnxt_re_dev_unreg(rdev);
+		}
 		break;
 		break;
 	case NETDEV_UP:
 	case NETDEV_UP:
 		bnxt_re_dispatch_event(&rdev->ibdev, NULL, 1,
 		bnxt_re_dispatch_event(&rdev->ibdev, NULL, 1,