]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
In ip_output(), do not acquire the IN_MULTI_LOCK(),
authorbms <bms@FreeBSD.org>
Wed, 4 Mar 2009 03:45:34 +0000 (03:45 +0000)
committerbms <bms@FreeBSD.org>
Wed, 4 Mar 2009 03:45:34 +0000 (03:45 +0000)
commit6370f947ccdaceac82582bbbc41f0114b7879cb1
tree419638ca1692b4320421bdd4d36ef0450aaa6c5f
parent01402dea5be7dd93fe8d4dcc8761febbb001ccdb
In ip_output(), do not acquire the IN_MULTI_LOCK(),
and do not attempt to perform a group lookup.
This is a socket layer lock, and the bottom half of IP
really has no business taking it.

Use the value of the in_mcast_loop sysctl to determine
if we should loop back by default, in the absence of
any multicast socket options. Because the check on
group membership is now deferred to the input path,
an m_copym() is now required.

This should increase multicast send performance where the
source has not requested loopback, although this has not been
benchmarked or measured.

It is also a necessary change for IN_MULTI_LOCK to become
non-recursive, which is required in order to implement IGMPv3
in a thread-safe way.
sys/netinet/ip_output.c