Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752144AbaBMR1K (ORCPT ); Thu, 13 Feb 2014 12:27:10 -0500 Received: from mail-lb0-f173.google.com ([209.85.217.173]:39184 "EHLO mail-lb0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751323AbaBMR1I (ORCPT ); Thu, 13 Feb 2014 12:27:08 -0500 Date: Thu, 13 Feb 2014 18:29:08 +0100 From: Emil Goode To: David Laight Cc: Steve Glendinning , Oliver Neukum , =?utf-8?B?QmrDuHJu?= Mork , "David S. Miller" , Freddy Xin , Eric Dumazet , Ming Lei , Paul Gortmaker , Jeff Kirsher , Liu Junliang , Octavian Purdila , "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v2] usbnet: remove generic hard_header_len check Message-ID: <20140213172908.GA4250@lianli> References: <1392310219-5719-1-git-send-email-emilgoode@gmail.com> <063D6719AE5E284EB5DD2968C1650D6D0F6BEF3A@AcuExch.aculab.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <063D6719AE5E284EB5DD2968C1650D6D0F6BEF3A@AcuExch.aculab.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Feb 13, 2014 at 04:56:58PM +0000, David Laight wrote: > 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. Yes probably the check is unnecessary to many of the devices but it should be tested by someone who has the hardware. If you have a ax88179 device to test this patch but without the hard_header_len check added to the ax88179_rx_fixup function that would be great. Then we don't need to introduce that check. Best regards, Emil Goode -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/