Okay, I patched if_rl.c in -current to fixe the problem demonstrated by
Matt's linktest program. The bug was actually on the receive side of the
rl driver, not the transmit side. A packet can wrap from the end of the
RX buffer back to the beginning, and in some cases these packets would
get lost due to botched use of m_pullup(). I can run the linktest
program now without losing any frames.
There's another way around this which is to allocate a whole mbuf
cluster when you know the packet is wrapped and bcopy the data manually
instead of using m_devget(), but I'm not sure I want to waste a whole
cluster just for that case.
-Bill
--
=============================================================================
-Bill Paul (212) 854-6020 | System Manager, Master of Unix-Fu
Work: [EMAIL PROTECTED] | Center for Telecommunications Research
Home: [EMAIL PROTECTED] | Columbia University, New York City
=============================================================================
"It is not I who am crazy; it is I who am mad!" - Ren Hoek, "Space Madness"
=============================================================================
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message