From owner-svn-src-projects@freebsd.org Wed Feb 3 21:56:53 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2CF14A9A1CC for ; Wed, 3 Feb 2016 21:56:53 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CE3321C70; Wed, 3 Feb 2016 21:56:52 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u13LupdE007395; Wed, 3 Feb 2016 21:56:51 GMT (envelope-from bz@FreeBSD.org) Received: (from bz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u13Lupe6007392; Wed, 3 Feb 2016 21:56:51 GMT (envelope-from bz@FreeBSD.org) Message-Id: <201602032156.u13Lupe6007392@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bz set sender to bz@FreeBSD.org using -f From: "Bjoern A. Zeeb" Date: Wed, 3 Feb 2016 21:56:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r295220 - in projects/vnet/sys: net netinet netinet6 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Feb 2016 21:56:53 -0000 Author: bz Date: Wed Feb 3 21:56:51 2016 New Revision: 295220 URL: https://svnweb.freebsd.org/changeset/base/295220 Log: Code duplication but rib_head is special. Not found an easy way to go back and harmize the use cases among RIB, IPFW, PF yet but it's also not the scope of this work. Prevents instant panics on teardown and frees the FIB bits again. Sponsored by: The FreeBSD Foundation Modified: projects/vnet/sys/net/route.c projects/vnet/sys/netinet/in_rmx.c projects/vnet/sys/netinet6/in6_rmx.c Modified: projects/vnet/sys/net/route.c ============================================================================== --- projects/vnet/sys/net/route.c Wed Feb 3 20:55:08 2016 (r295219) +++ projects/vnet/sys/net/route.c Wed Feb 3 21:56:51 2016 (r295220) @@ -353,10 +353,24 @@ rt_table_init(int offset) return (rh); } +static int +rt_freeentry(struct radix_node *rn, void *arg) +{ + struct radix_head * const rnh = arg; + struct radix_node *x; + + x = (struct radix_node *)rn_delete(rn + 2, NULL, rnh); + if (x != NULL) + R_Free(x); + return (0); +} + void rt_table_destroy(struct rib_head *rh) { + rn_walktree(&rh->rmhead.head, rt_freeentry, &rh->rmhead.head); + /* Assume table is already empty */ rw_destroy(&rh->rib_lock); free(rh, M_RTABLE); Modified: projects/vnet/sys/netinet/in_rmx.c ============================================================================== --- projects/vnet/sys/netinet/in_rmx.c Wed Feb 3 20:55:08 2016 (r295219) +++ projects/vnet/sys/netinet/in_rmx.c Wed Feb 3 21:56:51 2016 (r295220) @@ -133,7 +133,8 @@ int in_detachhead(void **head, int off) { - return (rn_detachhead(head)); + rt_table_destroy((struct rib_head *)(*head)); + return (1); } #endif Modified: projects/vnet/sys/netinet6/in6_rmx.c ============================================================================== --- projects/vnet/sys/netinet6/in6_rmx.c Wed Feb 3 20:55:08 2016 (r295219) +++ projects/vnet/sys/netinet6/in6_rmx.c Wed Feb 3 21:56:51 2016 (r295220) @@ -237,7 +237,9 @@ in6_detachhead(void **head, int off) { callout_drain(&V_rtq_mtutimer); - return (rn_detachhead(head)); + rt_table_destroy((struct rib_head *)(*head)); + + return (1); } #endif