On Fri, Nov 20, 2015 at 11:27:05PM +1000, David Gwynne wrote: > > > On 20 Nov 2015, at 11:23 PM, Reyk Floeter <r...@openbsd.org> wrote: > > > > On Fri, Nov 20, 2015 at 03:36:40PM +1000, David Gwynne wrote: > >> IFF_OACTIVE means the hardware ring is full, not if it is busy. > >> > >> perhaps a better check is to see whether there are pending packets > >> on the send queue? > >> > >> i could also argue we dont need the check at all, but this is less > >> of a semantic change. > >> > >> ok? > >> > > > > OK > > > > I added this check in the initial commit of trunk(4) more than 10 > > years ago. I don't remember a particular reason - there wasn't even a > > production use yet. I initially wrote trunk to use it for failover on > > some firewalls, but it was not going into production before it was > > committed to OpenBSD. > > > > So the reason for the flag might just be a historical one: back in the > > days, I heard that 10 years is a long time in IT, there was not much > > reference about implementing such a "cloner" correctly. I must have > > looked at vlan(4) or bridge(4) and decided that it was the way to do. > > I mean, before mpi@, working in the network stack was tough and very > > different: you didn't ask, never refered to any documentation, just > > relied on the traditions and repeated what was done by the BSD heroes > > in the past. > > thats exactly right. please dont take this as an accusation of negligence, > this is just mopping up some of that inherited code. > > im upset about my own use of IFQ_POLL() in a bunch of my own drivers, but > really i am only guilty of what you described above too. ie, we're not > guilty, we were just following best practices at the time. >
Hehe, i'm not feeling accused. I think it is a lot of fun to see all the progress and cleanup happening. I just wanted to tell a story ... and to point out that some of the obvious mistakes of the past weren't so obvious to us back then. > how would you feel if i simply removed the check? > fine! Reyk > >> Index: if_trunk.c > >> =================================================================== > >> RCS file: /cvs/src/sys/net/if_trunk.c,v > >> retrieving revision 1.124 > >> diff -u -p -r1.124 if_trunk.c > >> --- if_trunk.c 20 Nov 2015 05:33:54 -0000 1.124 > >> +++ if_trunk.c 20 Nov 2015 05:35:07 -0000 > >> @@ -296,7 +296,7 @@ trunk_port_create(struct trunk_softc *tr > >> return (ENOSPC); > >> > >> /* New trunk port has to be in an idle state */ > >> - if (ifp->if_flags & IFF_OACTIVE) > >> + if (!ifq_empty(&ifp->if_snd)) > >> return (EBUSY); > >> > >> /* Check if port has already been associated to a trunk */ > > > > -- > --