Index: sys/netpfil/pf/pf_ioctl.c =================================================================== --- sys/netpfil/pf/pf_ioctl.c +++ sys/netpfil/pf/pf_ioctl.c @@ -178,7 +178,7 @@ static int dehook_pf(void); static int shutdown_pf(void); static int pf_load(void); -static int pf_unload(void); +static void pf_unload(void); static struct cdevsw pf_cdevsw = { .d_ioctl = pfioctl, @@ -3783,10 +3783,9 @@ pf_mtag_cleanup(); } -static int +static void pf_unload(void) { - int error = 0; pf_end_threads = 1; while (pf_end_threads < 2) { @@ -3801,8 +3800,6 @@ rw_destroy(&pf_rules_lock); sx_destroy(&pf_ioctl_lock); - - return (error); } static void @@ -3819,6 +3816,9 @@ { pf_unload_vnet(); + + if (IS_DEFAULT_VNET(curvnet)) + pf_unload(); } VNET_SYSUNINIT(vnet_pf_uninit, SI_SUB_PROTO_FIREWALL, SI_ORDER_THIRD, vnet_pf_uninit, NULL); @@ -3840,7 +3840,7 @@ error = EBUSY; break; case MOD_UNLOAD: - error = pf_unload(); + /* Handled in vnet_pf_uninit() */ break; default: error = EINVAL;