cxgb4vf: recover from failure in cxgb4vf_open()

If the Link Start fails in cxgb4vf_open(), we need to back out any state
that we've built up ...

Signed-off-by: Casey Leedom <leedom@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by Casey Leedom and committed by David S. Miller 343a8d13 60dbb011

+10 -5
+10 -5
drivers/net/cxgb4vf/cxgb4vf_main.c
··· 749 netif_set_real_num_tx_queues(dev, pi->nqsets); 750 err = netif_set_real_num_rx_queues(dev, pi->nqsets); 751 if (err) 752 - return err; 753 - set_bit(pi->port_id, &adapter->open_device_map); 754 err = link_start(dev); 755 if (err) 756 - return err; 757 netif_tx_start_all_queues(dev); 758 return 0; 759 } 760 761 /* ··· 770 */ 771 static int cxgb4vf_stop(struct net_device *dev) 772 { 773 - int ret; 774 struct port_info *pi = netdev_priv(dev); 775 struct adapter *adapter = pi->adapter; 776 777 netif_tx_stop_all_queues(dev); 778 netif_carrier_off(dev); 779 - ret = t4vf_enable_vi(adapter, pi->viid, false, false); 780 pi->link_cfg.link_ok = 0; 781 782 clear_bit(pi->port_id, &adapter->open_device_map);
··· 749 netif_set_real_num_tx_queues(dev, pi->nqsets); 750 err = netif_set_real_num_rx_queues(dev, pi->nqsets); 751 if (err) 752 + goto err_unwind; 753 err = link_start(dev); 754 if (err) 755 + goto err_unwind; 756 + 757 netif_tx_start_all_queues(dev); 758 + set_bit(pi->port_id, &adapter->open_device_map); 759 return 0; 760 + 761 + err_unwind: 762 + if (adapter->open_device_map == 0) 763 + adapter_down(adapter); 764 + return err; 765 } 766 767 /* ··· 764 */ 765 static int cxgb4vf_stop(struct net_device *dev) 766 { 767 struct port_info *pi = netdev_priv(dev); 768 struct adapter *adapter = pi->adapter; 769 770 netif_tx_stop_all_queues(dev); 771 netif_carrier_off(dev); 772 + t4vf_enable_vi(adapter, pi->viid, false, false); 773 pi->link_cfg.link_ok = 0; 774 775 clear_bit(pi->port_id, &adapter->open_device_map);