IB/hfi1: Change hfi1_init loop to preserve error returns
authorAshutosh Dixit <ashutosh.dixit@intel.com>
Thu, 12 May 2016 17:24:00 +0000 (10:24 -0700)
committerDoug Ledford <dledford@redhat.com>
Fri, 13 May 2016 23:39:19 +0000 (19:39 -0400)
If one iteration of the loop causes an error return and a later iteration
doesn't, the later iteration causes the earlier error condition to be
lost. This could result in driver probe succeeding when it should have
failed. Therefore save off the error return in the loop itself rather than
outside the loop.

Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Reviewed-by: Mitko Haralanov <mitko.haralanov@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/staging/rdma/hfi1/init.c

index 502b7cf4647de3afa23bf15f2636d267d35a48da..9e71abf0f40f753c8a94b1174ac5e4bfde277b3b 100644 (file)
@@ -732,12 +732,12 @@ int hfi1_init(struct hfi1_devdata *dd, int reinit)
                lastfail = hfi1_create_rcvhdrq(dd, rcd);
                if (!lastfail)
                        lastfail = hfi1_setup_eagerbufs(rcd);
-               if (lastfail)
+               if (lastfail) {
                        dd_dev_err(dd,
                                   "failed to allocate kernel ctxt's rcvhdrq and/or egr bufs\n");
+                       ret = lastfail;
+               }
        }
-       if (lastfail)
-               ret = lastfail;
 
        /* Allocate enough memory for user event notification. */
        len = PAGE_ALIGN(dd->chip_rcv_contexts * HFI1_MAX_SHARED_CTXTS *