diff options
author | Thomas Falcon <tlfalcon@linux.vnet.ibm.com> | 2017-05-26 10:30:31 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-05-26 15:32:45 -0400 |
commit | 10f7621588b86d181a167c1535d0754eb5a58ba8 (patch) | |
tree | d4944cf1fffd65419a4c7e2d15d36d27e84c3ebd /drivers/net/ethernet/ibm/ibmvnic.c | |
parent | 2ce9e4efbf4289ce48144ec4986f58033890fb6d (diff) |
ibmvnic: Fix cleanup of SKB's on driver close
A race condition occurs when closing the driver. Free'ing of skb's
can race between the close routine and ibmvnic_tx_interrupt. To fix
this we move the claenup of tx pools during close to after the
sub-CRQ interrupts are disabled.
Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/ibm/ibmvnic.c')
-rw-r--r-- | drivers/net/ethernet/ibm/ibmvnic.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 465a8fafd95b..0f705e68755f 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c | |||
@@ -804,7 +804,6 @@ static int __ibmvnic_close(struct net_device *netdev) | |||
804 | adapter->state = VNIC_CLOSING; | 804 | adapter->state = VNIC_CLOSING; |
805 | netif_tx_stop_all_queues(netdev); | 805 | netif_tx_stop_all_queues(netdev); |
806 | ibmvnic_napi_disable(adapter); | 806 | ibmvnic_napi_disable(adapter); |
807 | clean_tx_pools(adapter); | ||
808 | 807 | ||
809 | if (adapter->tx_scrq) { | 808 | if (adapter->tx_scrq) { |
810 | for (i = 0; i < adapter->req_tx_queues; i++) | 809 | for (i = 0; i < adapter->req_tx_queues; i++) |
@@ -833,6 +832,7 @@ static int __ibmvnic_close(struct net_device *netdev) | |||
833 | } | 832 | } |
834 | } | 833 | } |
835 | 834 | ||
835 | clean_tx_pools(adapter); | ||
836 | adapter->state = VNIC_CLOSED; | 836 | adapter->state = VNIC_CLOSED; |
837 | return rc; | 837 | return rc; |
838 | } | 838 | } |