Date: Wed, 3 Feb 2016 21:56:51 +0000 (UTC) From: "Bjoern A. Zeeb" <bz@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r295220 - in projects/vnet/sys: net netinet netinet6 Message-ID: <201602032156.u13Lupe6007392@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201602032156.u13Lupe6007392>