From: Of Emil Goode > This patch removes a generic hard_header_len check from the usbnet > module that is causing dropped packages under certain circumstances > for devices that send rx packets that cross urb boundaries. > > One example is the AX88772B which occasionally send rx packets that > cross urb boundaries where the remaining partial packet is sent with > no hardware header. When the buffer with a partial packet is of less > number of octets than the value of hard_header_len the buffer is > discarded by the usbnet module. ... > diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c > index d6f64da..955df81 100644 > --- a/drivers/net/usb/ax88179_178a.c > +++ b/drivers/net/usb/ax88179_178a.c > @@ -1118,6 +1118,10 @@ static int ax88179_rx_fixup(struct usbnet *dev, struct sk_buff *skb) > u16 hdr_off; > u32 *pkt_hdr; > > + /* This check is no longer done by usbnet */ > + if (skb->len < dev->net->hard_header_len) > + return 0; > + The ax88179 driver can also receive ethernet frames that cross the end of rx URB. It should have the code to save the last fragment (of a urb) until the next data arrives, and then correctly merge the fragments. It is likely that any sub-driver that sets the receive urb length to a multiple of 1k (rather than leaving it at hard_hdr+mtu) can defrag rx data that crosses urb boundaries. David -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html