From eee9fe30782c111830a8a81a1c73f9c4f18abe8c Mon Sep 17 00:00:00 2001 From: Craig Rodrigues Date: Fri, 12 Aug 2005 02:38:20 +0000 Subject: Add NATM_LOCK() and NATM_UNLOCK() in places where npcb_add() and npcb_free() are called, in order to eliminate witness panics. This was overlooked in removal of GIANT from ATM. Reviewed by: rwatson --- sys/netinet/if_atm.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'sys') diff --git a/sys/netinet/if_atm.c b/sys/netinet/if_atm.c index 8093f9ae7174..d37a3908d7a1 100644 --- a/sys/netinet/if_atm.c +++ b/sys/netinet/if_atm.c @@ -144,6 +144,9 @@ atm_rtrequest(int req, struct rtentry *rt, struct rt_addrinfo *info) * Parse and verify the link level address as * an open request */ +#ifdef NATM + NATM_LOCK(); +#endif bzero(&op, sizeof(op)); addr = LLADDR(SDL(gate)); alen = SDL(gate)->sdl_alen; @@ -247,6 +250,9 @@ atm_rtrequest(int req, struct rtentry *rt, struct rt_addrinfo *info) SDL(gate)->sdl_type = rt->rt_ifp->if_type; SDL(gate)->sdl_index = rt->rt_ifp->if_index; +#ifdef NATM + NATM_UNLOCK(); +#endif break; failed: @@ -256,6 +262,7 @@ failed: rt->rt_llinfo = NULL; rt->rt_flags &= ~RTF_LLINFO; } + NATM_UNLOCK(); #endif /* mark as invalid. We cannot RTM_DELETE the route from * here, because the recursive call to rtrequest1 does @@ -269,10 +276,12 @@ failed: * tell native ATM we are done with this VC */ if (rt->rt_flags & RTF_LLINFO) { + NATM_LOCK(); npcb_free((struct natmpcb *)rt->rt_llinfo, NPCB_DESTROY); rt->rt_llinfo = NULL; rt->rt_flags &= ~RTF_LLINFO; + NATM_UNLOCK(); } #endif /* -- cgit v1.3