DF-3419 / fix.diff
--- a/sys/net/pf/pf_if.c +++ b/sys/net/pf/pf_if.c @@ -284,12 +284,14 @@ return; crit_enter(); + lwkt_gettoken(&pf_token); pfi_update++; if ((kif = pfi_kif_get(ifp->if_xname)) == NULL) panic("%s: pfi_kif_get failed", __func__); kif->pfik_ifp = ifp; ifp->if_pf_kif = kif; pfi_kif_update(kif); + lwkt_reltoken(&pf_token); crit_exit(); } @@ -302,11 +304,13 @@ return; crit_enter(); + lwkt_gettoken(&pf_token); pfi_update++; pfi_kif_update(kif); kif->pfik_ifp = NULL; ifp->if_pf_kif = NULL; pfi_kif_unref(kif, PFI_KIF_REF_NONE); + lwkt_reltoken(&pf_token); crit_exit(); } @@ -346,10 +350,12 @@ struct pfi_kif *kif; crit_enter(); + lwkt_gettoken(&pf_token); pfi_update++; if ((kif = pfi_kif_get(group)) == NULL) panic("%s: pfi_kif_get failed", __func__); pfi_kif_update(kif); + lwkt_reltoken(&pf_token); crit_exit(); } @@ -909,8 +915,10 @@ { if (ifp && ifp->if_pf_kif) { crit_enter(); + lwkt_gettoken(&pf_token); pfi_update++; pfi_kif_update(ifp->if_pf_kif); + lwkt_reltoken(&pf_token); crit_exit(); } } |