Drop IXL RX lock during TCP_LRO, fixes LOR mahem while holding the RX
queue lock when the uppoer stack is called inside TCP_LRO Submitted by: Kevin Bowling <kevin.bowling@kev009.com> Reviewed by: erj Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D11724
This commit is contained in:
parent
9d35858f48
commit
b7e0bde0af
@ -1400,9 +1400,7 @@ ixl_rx_input(struct rx_ring *rxr, struct ifnet *ifp, struct mbuf *m, u8 ptype)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
IXL_RX_UNLOCK(rxr);
|
||||
(*ifp->if_input)(ifp, m);
|
||||
IXL_RX_LOCK(rxr);
|
||||
}
|
||||
|
||||
|
||||
@ -1730,7 +1728,9 @@ ixl_rxeof(struct ixl_queue *que, int count)
|
||||
/* Now send to the stack or do LRO */
|
||||
if (sendmp != NULL) {
|
||||
rxr->next_check = i;
|
||||
IXL_RX_UNLOCK(rxr);
|
||||
ixl_rx_input(rxr, ifp, sendmp, ptype);
|
||||
IXL_RX_LOCK(rxr);
|
||||
i = rxr->next_check;
|
||||
}
|
||||
|
||||
@ -1747,6 +1747,8 @@ ixl_rxeof(struct ixl_queue *que, int count)
|
||||
|
||||
rxr->next_check = i;
|
||||
|
||||
IXL_RX_UNLOCK(rxr);
|
||||
|
||||
#if defined(INET6) || defined(INET)
|
||||
/*
|
||||
* Flush any outstanding LRO work
|
||||
@ -1762,7 +1764,6 @@ ixl_rxeof(struct ixl_queue *que, int count)
|
||||
#endif
|
||||
#endif /* defined(INET6) || defined(INET) */
|
||||
|
||||
IXL_RX_UNLOCK(rxr);
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user