freebsd-nq/sys
Bjoern A. Zeeb cc7e9d4325 In case an upper layer protocol tries to send a packet but the
L2 code does not have the ethernet address for the destination
within the broadcast domain in the table, we remember the
original mbuf in `la_hold' in arpresolve() and send out a
different packet with an arp request.
In case there will be more upper layer packets to send we will
free an earlier one held in `la_hold' and queue the new one.

Once we get a packet in, with which we can perfect our arp table
entry we send out the original 'on hold' packet, should there
be any.
Rather than continuing to process the packet that we received,
we returned without freeing the packet that came in, which
basically means that we leaked an mbuf for every arp request
we sent.

Rather than freeing the received packet and returning, continue
to process the incoming arp packet as well.
This should (a) improve some setups, also proxy-arp, in case it was an
incoming arp request and (b) resembles the behaviour FreeBSD had
from day 1, which alignes with RFC826 "Packet reception" (merge case).

Rename 'm0' to 'hold' to make the code more understandable as
well as diffable to earlier versions more easily.

Handle the link-layer entry 'la' lock comepletely in the block
where needed and release it as early as possible, rather than
holding it longer, down to the end of the function.

Found by:			pointyhat, ns1
Bug hunting session with:	erwin, simon, rwatson
Tested by:			simon on cluster machines
Reviewed by:			ratson, kmacy, julian
MFC after:			3 days
2009-09-01 17:53:01 +00:00
..
amd64 Simplify pmap_change_attr() a bit: 2009-08-31 18:41:13 +00:00
arm Reintroduce the r196640, after fixing the problem with my testing. 2009-09-01 11:41:51 +00:00
boot Fix parse() so that the partition to boot (load /boot/loader) from can 2009-08-17 15:19:03 +00:00
bsm Import OpenBSM 1.1p1 from vendor branch to 8-CURRENT, populating 2009-07-17 14:02:20 +00:00
cam Short ATA command format has 28bit address, not 36bit. 2009-08-30 16:31:25 +00:00
cddl Backport the 'dirtying dbuf' panic fix from newer ZFS version. 2009-08-31 16:27:00 +00:00
compat Make sure FreeBSD binaries without .note.ABI-tag section work 2009-08-30 14:38:17 +00:00
conf Connect bwi up to the build. While there are some problems with this 2009-08-29 01:34:42 +00:00
contrib Fix argument ordering to memcpy as well as the size of the copy in the 2009-08-25 19:30:32 +00:00
crypto Changed to M_NOWAIT when reallocing psc_buf in padlock_sha_update(), 2009-05-27 09:52:12 +00:00
ddb Merge the remainder of kern_vimage.c and vimage.h into vnet.c and 2009-08-01 19:26:27 +00:00
dev Make sure rx descriptor ring align on 16 bytes. I guess the 2009-08-31 22:09:48 +00:00
fs Remove spurious pfs_unlock(). 2009-08-31 09:26:04 +00:00
gdb
geom There's no need for checking result of M_WAITOK allocation. 2009-08-27 08:40:51 +00:00
gnu Fix the build by using proper format. 2009-06-25 16:48:13 +00:00
i386 Delete whitespace not in i386/pmap.c 2009-09-01 12:17:47 +00:00
ia64 Decouple ACPI CPU Ids from FreeBSD's cpuid. The ACPI Ids can be 2009-08-16 01:43:08 +00:00
isa Tweak the way that the ACPI and ISA bus drivers match hint devices to 2009-08-24 21:51:46 +00:00
kern Fix mount reference leak when V_XSLEEP is specified to vn_start_write(). 2009-09-01 12:05:39 +00:00
kgssapi When the KOBJMETHOD() macro was updated, it resulted in the 2009-06-14 17:33:46 +00:00
libkern done method is supposed to return int. 2009-06-22 22:09:18 +00:00
mips * Completely Remove the option STOP_NMI from the kernel. This option 2009-08-13 17:09:45 +00:00
modules Connect bwi up to the build. While there are some problems with this 2009-08-29 01:34:42 +00:00
net As part of r196609, a call to "rtalloc" did not take the fib into 2009-08-31 00:14:37 +00:00
net80211 Fix a typo in ifdef mesh support. This would make mesh unworkable if 2009-08-17 12:57:57 +00:00
netatalk Reverse misordered unlock and lock in at_control for netatalk phase I 2009-08-12 10:44:13 +00:00
netgraph Rework global locks for interface list and index management, correcting 2009-08-23 20:40:19 +00:00
netinet In case an upper layer protocol tries to send a packet but the 2009-09-01 17:53:01 +00:00
netinet6 Prefix on-link verification is being performed on statically 2009-08-30 02:07:23 +00:00
netipsec Rework global locks for interface list and index management, correcting 2009-08-23 20:40:19 +00:00
netipx Use queue(9) instead of hand-crafted link lists for the global IPX 2009-06-24 20:57:50 +00:00
netnatm Reimplement the netisr framework in order to support parallel netisr 2009-06-01 10:41:38 +00:00
netncp
netsmb Rework socket upcalls to close some races with setup/teardown of upcalls. 2009-06-01 21:17:03 +00:00
nfs Revert rev 192323 (nfs_common.c only): 2009-07-12 03:53:52 +00:00
nfsclient Fix NFS panics with options VIMAGE kernels by apropriately setting curvnet 2009-08-24 10:09:30 +00:00
nfsserver Remove the old kernel RPC implementation and the NFS_LEGACYRPC option. 2009-06-30 19:03:27 +00:00
nlm Since svc_[dg|vc|tli|tp]_create() did not hold a reference count on the 2009-06-17 22:50:26 +00:00
opencrypto Fix cryptodev UIO creation. 2009-05-23 13:23:46 +00:00
pc98 Temporarily revert the new-bus locking for 8.0 release. It will be 2009-08-20 19:17:53 +00:00
pci Add RTL8168DP/RTL8111DP device id. While I'm here append "8111D" to 2009-08-24 18:58:13 +00:00
powerpc * Completely Remove the option STOP_NMI from the kernel. This option 2009-08-13 17:09:45 +00:00
rpc Fix NFS panics with options VIMAGE kernels by apropriately setting curvnet 2009-08-24 10:09:30 +00:00
security Correctly audit real gids following changes to the audit record argument 2009-08-12 10:45:45 +00:00
sparc64 * Completely Remove the option STOP_NMI from the kernel. This option 2009-08-13 17:09:45 +00:00
sun4v * Completely Remove the option STOP_NMI from the kernel. This option 2009-08-13 17:09:45 +00:00
sys Reintroduce the r196640, after fixing the problem with my testing. 2009-09-01 11:41:51 +00:00
tools - Increase dynamic range of filter coefficients from 28bit to 30bit. 2009-07-05 18:15:06 +00:00
ufs When a UFS node is truncated to the zero length, e.g. by explicit 2009-08-14 11:00:38 +00:00
vm Reintroduce the r196640, after fixing the problem with my testing. 2009-09-01 11:41:51 +00:00
xdr Add a check for a NULL mbuf ptr at the beginning of xdrmbuf_inline() 2009-08-12 16:27:51 +00:00
xen Temporarily revert the new-bus locking for 8.0 release. It will be 2009-08-20 19:17:53 +00:00
Makefile Remove the unmaintained University of Michigan NFSv4 client from 8.x 2009-05-22 12:35:12 +00:00