ionic: check for NULL structs on teardown
Make sure the queue structs exist before trying to tear
them down to make for safer error recovery.
Fixes: 0f3154e6bc
("ionic: Add Tx and Rx handling")
Signed-off-by: Shannon Nelson <snelson@pensando.io>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b9c17d39d5
commit
a4674f3471
@ -320,19 +320,21 @@ static void ionic_qcqs_free(struct ionic_lif *lif)
|
||||
lif->adminqcq = NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < lif->nxqs; i++)
|
||||
if (lif->rxqcqs[i].stats)
|
||||
devm_kfree(dev, lif->rxqcqs[i].stats);
|
||||
if (lif->rxqcqs) {
|
||||
for (i = 0; i < lif->nxqs; i++)
|
||||
if (lif->rxqcqs[i].stats)
|
||||
devm_kfree(dev, lif->rxqcqs[i].stats);
|
||||
devm_kfree(dev, lif->rxqcqs);
|
||||
lif->rxqcqs = NULL;
|
||||
}
|
||||
|
||||
devm_kfree(dev, lif->rxqcqs);
|
||||
lif->rxqcqs = NULL;
|
||||
|
||||
for (i = 0; i < lif->nxqs; i++)
|
||||
if (lif->txqcqs[i].stats)
|
||||
devm_kfree(dev, lif->txqcqs[i].stats);
|
||||
|
||||
devm_kfree(dev, lif->txqcqs);
|
||||
lif->txqcqs = NULL;
|
||||
if (lif->txqcqs) {
|
||||
for (i = 0; i < lif->nxqs; i++)
|
||||
if (lif->txqcqs[i].stats)
|
||||
devm_kfree(dev, lif->txqcqs[i].stats);
|
||||
devm_kfree(dev, lif->txqcqs);
|
||||
lif->txqcqs = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void ionic_link_qcq_interrupts(struct ionic_qcq *src_qcq,
|
||||
|
@ -243,11 +243,16 @@ static void ionic_adminq_cb(struct ionic_queue *q,
|
||||
|
||||
static int ionic_adminq_post(struct ionic_lif *lif, struct ionic_admin_ctx *ctx)
|
||||
{
|
||||
struct ionic_queue *adminq = &lif->adminqcq->q;
|
||||
struct ionic_queue *adminq;
|
||||
int err = 0;
|
||||
|
||||
WARN_ON(in_interrupt());
|
||||
|
||||
if (!lif->adminqcq)
|
||||
return -EIO;
|
||||
|
||||
adminq = &lif->adminqcq->q;
|
||||
|
||||
spin_lock(&lif->adminq_lock);
|
||||
if (!ionic_q_has_space(adminq, 1)) {
|
||||
err = -ENOSPC;
|
||||
|
Loading…
Reference in New Issue
Block a user