diff options
author | David L Stevens <dlstevens@us.ibm.com> | 2005-06-21 13:58:25 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-06-21 13:58:25 -0700 |
commit | c9e3e8b6958e02230079e6817862ea2968509866 (patch) | |
tree | 296b30b9e208d37b1cdfa6d40ad785abb1487bd9 /arch/m32r/kernel/io_opsput.c | |
parent | 0d51aa80a9b1db43920c0770c3bb842dd823c005 (diff) |
[IPV6]: multicast join and misc
Here is a simplified version of the patch to fix a bug in IPv6
multicasting. It:
1) adds existence check & EADDRINUSE error for regular joins
2) adds an exception for EADDRINUSE in the source-specific multicast
join (where a prior join is ok)
3) adds a missing/needed read_lock on sock_mc_list; would've raced
with destroying the socket on interface down without
4) adds a "leave group" in the (INCLUDE, empty) source filter case.
This frees unneeded socket buffer memory, but also prevents
an inappropriate interaction among the 8 socket options that
mess with this. Some would fail as if in the group when you
aren't really.
Item #4 had a locking bug in the last version of this patch; rather than
removing the idev->lock read lock only, I've simplified it to remove
all lock state in the path and treat it as a direct "leave group" call for
the (INCLUDE,empty) case it covers. Tested on an MP machine. :-)
Much thanks to HoerdtMickael <hoerdt@clarinet.u-strasbg.fr> who
reported the original bug.
Signed-off-by: David L Stevens <dlstevens@us.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/m32r/kernel/io_opsput.c')
0 files changed, 0 insertions, 0 deletions