Forgot to say, rt_timer_remove_all() and ifafree() could be moved out of kernel lock too, but with next diff.
On Wed, Apr 19, 2023 at 05:03:00PM +0300, Vitaliy Makkoveev wrote: > Index: sys/net/route.c > =================================================================== > RCS file: /cvs/src/sys/net/route.c,v > retrieving revision 1.416 > diff -u -p -r1.416 route.c > --- sys/net/route.c 28 Jan 2023 10:17:16 -0000 1.416 > +++ sys/net/route.c 19 Apr 2023 14:00:31 -0000 > @@ -504,9 +504,10 @@ rtfree(struct rtentry *rt) > #ifdef MPLS > rt_mpls_clear(rt); > #endif > + KERNEL_UNLOCK(); > + > free(rt->rt_gateway, M_RTABLE, ROUNDUP(rt->rt_gateway->sa_len)); > free(rt_key(rt), M_RTABLE, rt_key(rt)->sa_len); > - KERNEL_UNLOCK(); > > pool_put(&rtentry_pool, rt); > }