in_broadcast() called for almost every packet in ip_output()
gallatin at netflix.com
Wed Jul 20 19:00:52 UTC 2016
I'd certainly prefer not to add any overhead. Properly managing this (and
other similar) lists is a job for some lightweight lifecycle based
mechanism like concurrency kit or rcu.
Unless you have a solid reason to fix it, I'd suggest just adding the
locking commented out (the way rwatson did with IN_IFADDR_RLOCK in
ip_input(), so that the next person to trip over it will know what's going
On Wed, Jul 20, 2016 at 1:29 PM, Ryan Stone <rysto32 at gmail.com> wrote:
> I've hit a dilemma in a fix I have in review. Currently, in_broadcast()
> iterates over the ifnet address list without holding any locks. I can
> pretty easily panic the kernel by constantly adding and removing addresses
> while passing traffic over the interface. The fix is to acquire the
> appropriate rlock, but the catch is that according to dtrace,
> in_broadcast() is called on almost every packet that passes through
> ip_output(). I'm concerned about adding additional locking operations to
> the transmit path.
> Do we actually need to call in_broadcast() so often? It seems silly to
> check whether we are sending to a broadcast address on a per-packet basis.
>  https://reviews.freebsd.org/D7227
> freebsd-transport at freebsd.org mailing list
> To unsubscribe, send any mail to "
> freebsd-transport-unsubscribe at freebsd.org"
More information about the freebsd-transport