From owner-svn-src-head@FreeBSD.ORG Fri May 1 11:05:25 2009 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1BC3F106567A; Fri, 1 May 2009 11:05:25 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 086E58FC1C; Fri, 1 May 2009 11:05:25 +0000 (UTC) (envelope-from bms@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n41B5O28041308; Fri, 1 May 2009 11:05:24 GMT (envelope-from bms@svn.freebsd.org) Received: (from bms@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n41B5OUY041307; Fri, 1 May 2009 11:05:24 GMT (envelope-from bms@svn.freebsd.org) Message-Id: <200905011105.n41B5OUY041307@svn.freebsd.org> From: Bruce M Simpson Date: Fri, 1 May 2009 11:05:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191718 - head/sys/netinet6 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 May 2009 11:05:26 -0000 Author: bms Date: Fri May 1 11:05:24 2009 New Revision: 191718 URL: http://svn.freebsd.org/changeset/base/191718 Log: Limit scope of acquisition of INP_RLOCK for multicast input filter to the scope of its use, even though this may thrash the lock if the INP is referenced for other purposes. Tested by: David Wolfskill Modified: head/sys/netinet6/udp6_usrreq.c Modified: head/sys/netinet6/udp6_usrreq.c ============================================================================== --- head/sys/netinet6/udp6_usrreq.c Fri May 1 08:03:46 2009 (r191717) +++ head/sys/netinet6/udp6_usrreq.c Fri May 1 11:05:24 2009 (r191718) @@ -279,8 +279,6 @@ udp6_input(struct mbuf **mp, int *offp, continue; } - INP_RLOCK(inp); - /* * Handle socket delivery policy for any-source * and source-specific multicast. [RFC3678] @@ -290,6 +288,8 @@ udp6_input(struct mbuf **mp, int *offp, struct sockaddr_in6 mcaddr; int blocked; + INP_RLOCK(inp); + bzero(&mcaddr, sizeof(struct sockaddr_in6)); mcaddr.sin6_len = sizeof(struct sockaddr_in6); mcaddr.sin6_family = AF_INET6; @@ -304,9 +304,11 @@ udp6_input(struct mbuf **mp, int *offp, if (blocked == MCAST_NOTSMEMBER || blocked == MCAST_MUTED) UDPSTAT_INC(udps_filtermcast); - INP_RUNLOCK(inp); + INP_RUNLOCK(inp); /* XXX */ continue; } + + INP_RUNLOCK(inp); } if (last != NULL) { struct mbuf *n; @@ -423,8 +425,6 @@ udp6_input(struct mbuf **mp, int *offp, return (IPPROTO_DONE); badheadlocked: - if (inp) - INP_RUNLOCK(inp); INP_INFO_RUNLOCK(&V_udbinfo); badunlocked: if (m)