else
                        DP_ERR(dev, "roce alloc tid returned error %d\n", rc);
 
-               goto err0;
+               goto err1;
        }
 
        /* Index only, 18 bit long, lkey = itid << 8 | key */
        rc = dev->ops->rdma_register_tid(dev->rdma_ctx, &mr->hw_mr);
        if (rc) {
                DP_ERR(dev, "roce register tid returned an error %d\n", rc);
-               goto err1;
+               goto err2;
        }
 
        mr->ibmr.lkey = mr->hw_mr.itid << 8 | mr->hw_mr.key;
        DP_DEBUG(dev, QEDR_MSG_MR, "alloc frmr: %x\n", mr->ibmr.lkey);
        return mr;
 
-err1:
+err2:
        dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid);
+err1:
+       qedr_free_pbl(dev, &mr->info.pbl_info, mr->info.pbl_table);
 err0:
        kfree(mr);
        return ERR_PTR(rc);