make sure if_transmit returns 0 if the mbuf is enqueued.
ixgbe/ixv.c still needs a similar fix but it takes a little more restructuring of the code. MFC after: 3 days
This commit is contained in:
parent
a618ae937e
commit
c7156fe92f
@ -989,12 +989,12 @@ igb_mq_start(struct ifnet *ifp, struct mbuf *m)
|
|||||||
if (err)
|
if (err)
|
||||||
return (err);
|
return (err);
|
||||||
if (IGB_TX_TRYLOCK(txr)) {
|
if (IGB_TX_TRYLOCK(txr)) {
|
||||||
err = igb_mq_start_locked(ifp, txr);
|
igb_mq_start_locked(ifp, txr);
|
||||||
IGB_TX_UNLOCK(txr);
|
IGB_TX_UNLOCK(txr);
|
||||||
} else
|
} else
|
||||||
taskqueue_enqueue(que->tq, &txr->txq_task);
|
taskqueue_enqueue(que->tq, &txr->txq_task);
|
||||||
|
|
||||||
return (err);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -831,12 +831,12 @@ ixgbe_mq_start(struct ifnet *ifp, struct mbuf *m)
|
|||||||
if (err)
|
if (err)
|
||||||
return (err);
|
return (err);
|
||||||
if (IXGBE_TX_TRYLOCK(txr)) {
|
if (IXGBE_TX_TRYLOCK(txr)) {
|
||||||
err = ixgbe_mq_start_locked(ifp, txr);
|
ixgbe_mq_start_locked(ifp, txr);
|
||||||
IXGBE_TX_UNLOCK(txr);
|
IXGBE_TX_UNLOCK(txr);
|
||||||
} else
|
} else
|
||||||
taskqueue_enqueue(que->tq, &txr->txq_task);
|
taskqueue_enqueue(que->tq, &txr->txq_task);
|
||||||
|
|
||||||
return (err);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -2935,7 +2935,6 @@ vmxnet3_txq_mq_start_locked(struct vmxnet3_txqueue *txq, struct mbuf *m)
|
|||||||
/* Assume worse case if this mbuf is the head of a chain. */
|
/* Assume worse case if this mbuf is the head of a chain. */
|
||||||
if (m->m_next != NULL && avail < VMXNET3_TX_MAXSEGS) {
|
if (m->m_next != NULL && avail < VMXNET3_TX_MAXSEGS) {
|
||||||
drbr_putback(ifp, br, m);
|
drbr_putback(ifp, br, m);
|
||||||
error = ENOBUFS;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2958,7 +2957,7 @@ vmxnet3_txq_mq_start_locked(struct vmxnet3_txqueue *txq, struct mbuf *m)
|
|||||||
txq->vxtxq_watchdog = VMXNET3_WATCHDOG_TIMEOUT;
|
txq->vxtxq_watchdog = VMXNET3_WATCHDOG_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (error);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
x
Reference in New Issue
Block a user