Skip to content

Commit 1b8955e

Browse files
nfontdavem330
authored andcommitted
ibmvnic: Cleanup failure path in ibmvnic_open
Now that ibmvnic_release_resources will clean up all of our resources properly, even if they were not allocated, we can just call this for failues in ibmvnic_open. This patch also moves the ibmvnic_release_resources() routine up in the file to avoid creating a forward declaration ad re-names it to drop the ibmvnic prefix. Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 7bbc27a commit 1b8955e

File tree

1 file changed

+19
-32
lines changed

1 file changed

+19
-32
lines changed

drivers/net/ethernet/ibm/ibmvnic.c

Lines changed: 19 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -578,13 +578,23 @@ static int ibmvnic_login(struct net_device *netdev)
578578
return 0;
579579
}
580580

581+
static void release_resources(struct ibmvnic_adapter *adapter)
582+
{
583+
release_bounce_buffer(adapter);
584+
release_tx_pools(adapter);
585+
release_rx_pools(adapter);
586+
587+
release_sub_crqs(adapter);
588+
release_crq_queue(adapter);
589+
590+
release_stats_token(adapter);
591+
}
592+
581593
static int ibmvnic_open(struct net_device *netdev)
582594
{
583595
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
584596
struct device *dev = &adapter->vdev->dev;
585597
union ibmvnic_crq crq;
586-
int rxadd_subcrqs;
587-
int tx_subcrqs;
588598
int rc = 0;
589599
int i;
590600

@@ -610,16 +620,11 @@ static int ibmvnic_open(struct net_device *netdev)
610620
return -1;
611621
}
612622

613-
rxadd_subcrqs =
614-
be32_to_cpu(adapter->login_rsp_buf->num_rxadd_subcrqs);
615-
tx_subcrqs =
616-
be32_to_cpu(adapter->login_rsp_buf->num_txsubm_subcrqs);
617-
618623
adapter->map_id = 1;
619624
adapter->napi = kcalloc(adapter->req_rx_queues,
620625
sizeof(struct napi_struct), GFP_KERNEL);
621626
if (!adapter->napi)
622-
goto alloc_napi_failed;
627+
goto ibmvnic_open_fail;
623628
for (i = 0; i < adapter->req_rx_queues; i++) {
624629
netif_napi_add(netdev, &adapter->napi[i], ibmvnic_poll,
625630
NAPI_POLL_WEIGHT);
@@ -630,15 +635,15 @@ static int ibmvnic_open(struct net_device *netdev)
630635

631636
rc = init_rx_pools(netdev);
632637
if (rc)
633-
goto rx_pool_failed;
638+
goto ibmvnic_open_fail;
634639

635640
rc = init_tx_pools(netdev);
636641
if (rc)
637-
goto tx_pool_failed;
642+
goto ibmvnic_open_fail;
638643

639644
rc = init_bounce_buffer(netdev);
640645
if (rc)
641-
goto bounce_init_failed;
646+
goto ibmvnic_open_fail;
642647

643648
replenish_pools(adapter);
644649

@@ -662,31 +667,13 @@ static int ibmvnic_open(struct net_device *netdev)
662667

663668
return 0;
664669

665-
bounce_init_failed:
666-
i = tx_subcrqs - 1;
667-
kfree(adapter->tx_pool[i].free_map);
668-
tx_pool_failed:
669-
i = rxadd_subcrqs;
670-
rx_pool_failed:
670+
ibmvnic_open_fail:
671671
for (i = 0; i < adapter->req_rx_queues; i++)
672672
napi_disable(&adapter->napi[i]);
673-
alloc_napi_failed:
674-
release_sub_crqs(adapter);
673+
release_resources(adapter);
675674
return -ENOMEM;
676675
}
677676

678-
static void ibmvnic_release_resources(struct ibmvnic_adapter *adapter)
679-
{
680-
release_bounce_buffer(adapter);
681-
release_tx_pools(adapter);
682-
release_rx_pools(adapter);
683-
684-
release_sub_crqs(adapter);
685-
release_crq_queue(adapter);
686-
687-
release_stats_token(adapter);
688-
}
689-
690677
static int ibmvnic_close(struct net_device *netdev)
691678
{
692679
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
@@ -707,7 +694,7 @@ static int ibmvnic_close(struct net_device *netdev)
707694
crq.logical_link_state.link_state = IBMVNIC_LOGICAL_LNK_DN;
708695
ibmvnic_send_crq(adapter, &crq);
709696

710-
ibmvnic_release_resources(adapter);
697+
release_resources(adapter);
711698

712699
adapter->is_closed = true;
713700
adapter->closing = false;

0 commit comments

Comments
 (0)