ionic: Add missing err handling for queue reconfig
ionic_start_queues_reconfig returns an error code if txrx_init fails. Handle this error code in the relevant places. This fixes a corner case where the device could get left in a detached state if the CMB reconfig fails and the attempt to clean up the mess also fails. Note that calling netif_device_attach when the netdev is already attached does not lead to unexpected behavior. Change goto name "errout" to "err_out" to maintain consistency across goto statements. Fixes: 40bc471dc714 ("ionic: add tx/rx-push support with device Component Memory Buffers") Fixes: 6f7d6f0fd7a3 ("ionic: pull reset_queues into tx_timeout handler") Signed-off-by: Nitya Sunkad <nitya.sunkad@amd.com> Signed-off-by: Shannon Nelson <shannon.nelson@amd.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b1c936e9af
commit
52417a95ff
@ -1817,6 +1817,7 @@ static int ionic_change_mtu(struct net_device *netdev, int new_mtu)
|
||||
static void ionic_tx_timeout_work(struct work_struct *ws)
|
||||
{
|
||||
struct ionic_lif *lif = container_of(ws, struct ionic_lif, tx_timeout_work);
|
||||
int err;
|
||||
|
||||
if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
|
||||
return;
|
||||
@ -1829,8 +1830,11 @@ static void ionic_tx_timeout_work(struct work_struct *ws)
|
||||
|
||||
mutex_lock(&lif->queue_lock);
|
||||
ionic_stop_queues_reconfig(lif);
|
||||
ionic_start_queues_reconfig(lif);
|
||||
err = ionic_start_queues_reconfig(lif);
|
||||
mutex_unlock(&lif->queue_lock);
|
||||
|
||||
if (err)
|
||||
dev_err(lif->ionic->dev, "%s: Restarting queues failed\n", __func__);
|
||||
}
|
||||
|
||||
static void ionic_tx_timeout(struct net_device *netdev, unsigned int txqueue)
|
||||
@ -2800,17 +2804,22 @@ static int ionic_cmb_reconfig(struct ionic_lif *lif,
|
||||
if (err) {
|
||||
dev_err(lif->ionic->dev,
|
||||
"CMB restore failed: %d\n", err);
|
||||
goto errout;
|
||||
goto err_out;
|
||||
}
|
||||
}
|
||||
|
||||
ionic_start_queues_reconfig(lif);
|
||||
} else {
|
||||
/* This was detached in ionic_stop_queues_reconfig() */
|
||||
netif_device_attach(lif->netdev);
|
||||
err = ionic_start_queues_reconfig(lif);
|
||||
if (err) {
|
||||
dev_err(lif->ionic->dev,
|
||||
"CMB reconfig failed: %d\n", err);
|
||||
goto err_out;
|
||||
}
|
||||
}
|
||||
|
||||
errout:
|
||||
err_out:
|
||||
/* This was detached in ionic_stop_queues_reconfig() */
|
||||
netif_device_attach(lif->netdev);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user