Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Oct 2011 08:26:23 +0000 (UTC)
From:      Qing Li <qingli@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r226333 - stable/9/sys/netinet
Message-ID:  <201110130826.p9D8QNe1006520@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: qingli
Date: Thu Oct 13 08:26:23 2011
New Revision: 226333
URL: http://svn.freebsd.org/changeset/base/226333

Log:
  MFC 226114
  
  Remove the reference held on the loopback route when the interface
  address is being deleted. Only the last reference holder deletes the
  loopback route. All other delete operations just clear the IFA_RTSELF
  flag.
  
  PR:		kern/159601
  Submitted by:	pluknet
  Reviewed by:	discussed on net@
  Approved by:	re (kib)

Modified:
  stable/9/sys/netinet/in.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/amd64/include/xen/   (props changed)
  stable/9/sys/boot/   (props changed)
  stable/9/sys/boot/i386/efi/   (props changed)
  stable/9/sys/boot/ia64/efi/   (props changed)
  stable/9/sys/boot/ia64/ski/   (props changed)
  stable/9/sys/boot/powerpc/boot1.chrp/   (props changed)
  stable/9/sys/boot/powerpc/ofw/   (props changed)
  stable/9/sys/cddl/contrib/opensolaris/   (props changed)
  stable/9/sys/conf/   (props changed)
  stable/9/sys/contrib/dev/acpica/   (props changed)
  stable/9/sys/contrib/octeon-sdk/   (props changed)
  stable/9/sys/contrib/pf/   (props changed)
  stable/9/sys/contrib/x86emu/   (props changed)

Modified: stable/9/sys/netinet/in.c
==============================================================================
--- stable/9/sys/netinet/in.c	Thu Oct 13 03:21:48 2011	(r226332)
+++ stable/9/sys/netinet/in.c	Thu Oct 13 08:26:23 2011	(r226333)
@@ -1126,8 +1126,10 @@ in_scrubprefix(struct in_ifaddr *target,
 			RT_LOCK(ia_ro.ro_rt);
 			if (ia_ro.ro_rt->rt_refcnt <= 1)
 				freeit = 1;
-			else
+			else if (flags & LLE_STATIC) {
 				RT_REMREF(ia_ro.ro_rt);
+				target->ia_flags &= ~IFA_RTSELF;
+			}
 			RTFREE_LOCKED(ia_ro.ro_rt);
 		}
 		if (freeit && (flags & LLE_STATIC)) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201110130826.p9D8QNe1006520>