From owner-freebsd-net@FreeBSD.ORG Fri Dec 13 22:17:36 2013 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id A1B8411D; Fri, 13 Dec 2013 22:17:36 +0000 (UTC) Received: from bigwig.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 76C1F130C; Fri, 13 Dec 2013 22:17:36 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 6DAE1B96C; Fri, 13 Dec 2013 17:17:35 -0500 (EST) From: John Baldwin To: Adrian Chadd Subject: Re: A small fix for if_em.c, if_igb.c, if_ixgbe.c Date: Fri, 13 Dec 2013 17:17:10 -0500 User-Agent: KMail/1.13.5 (FreeBSD/8.4-CBSD-20130906; KDE/4.5.5; amd64; ; ) References: <521B9C2A-EECC-4412-9F68-2235320EF324@lurchi.franken.de> <201312131326.28952.jhb@freebsd.org> In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201312131717.10863.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Fri, 13 Dec 2013 17:17:35 -0500 (EST) Cc: Yong-Hyeon Pyun , FreeBSD Net , John-Mark Gurney , Jack F Vogel , Michael Tuexen X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Dec 2013 22:17:36 -0000 On Friday, December 13, 2013 4:51:18 pm Adrian Chadd wrote: > On 13 December 2013 10:26, John Baldwin wrote: > > On Monday, December 09, 2013 2:37:08 pm Adrian Chadd wrote: > >> Jack / John - thoughts? > > > > Note that if_start has always worked the way if_transmit would work with the > > err = 0 change. All the other drivers in the tree are already giving you an > > error if an earlier packet in the IFQ fails to transmit, and it's been that > > way for decades. If you decide to make if_transmit precise (only return an > > error if the specific packet fails), the corresponding change for if_start() > > drivers would be to never return an error ever. > > Right. If we want some kind of sane network behaviour moving forward > we .. well, we have to define it as being sane. :-) > > IMHO if_start()'s API should've been: > > * queue something to the ifnet queue - fail it we can't queue it > * call if_start() to start trying to transmit something - a failure is > not that the queued frame failed, but the driver is unable to dequeue > frames. > > Anyone using if_start() failing as "the frame i just queued failed to > transmit" is broken and well, we should just replace it with > if_transmit(). Hmm, I was a bit wrong. Driver if_start routines return void, so they only failed if the IFQ filled up completely. In that case, I think it is fine to move forward with what you want (only return an error for failures involving the packet passed to if_transmit), but I don't think we should hange if_transmit drivers to just always return 0. -- John Baldwin