Date: Fri, 9 Dec 2016 18:00:45 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r309747 - head/sys/netpfil/pf Message-ID: <201612091800.uB9I0jBN088344@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Fri Dec 9 18:00:45 2016 New Revision: 309747 URL: https://svnweb.freebsd.org/changeset/base/309747 Log: Backout accidentially leaked in r309746 not yet reviewed patch :( Modified: head/sys/netpfil/pf/if_pfsync.c Modified: head/sys/netpfil/pf/if_pfsync.c ============================================================================== --- head/sys/netpfil/pf/if_pfsync.c Fri Dec 9 17:59:15 2016 (r309746) +++ head/sys/netpfil/pf/if_pfsync.c Fri Dec 9 18:00:45 2016 (r309747) @@ -161,8 +161,8 @@ static struct pfsync_q pfsync_qs[] = { { pfsync_out_del, sizeof(struct pfsync_del_c), PFSYNC_ACT_DEL_C } }; -static void pfsync_q_ins(struct pf_state *, int, bool); -static void pfsync_q_del(struct pf_state *, bool); +static void pfsync_q_ins(struct pf_state *, int); +static void pfsync_q_del(struct pf_state *); static void pfsync_update_state(struct pf_state *); @@ -542,7 +542,7 @@ pfsync_state_import(struct pfsync_state if (!(flags & PFSYNC_SI_IOCTL)) { st->state_flags &= ~PFSTATE_NOSYNC; if (st->state_flags & PFSTATE_ACK) { - pfsync_q_ins(st, PFSYNC_S_IACK, true); + pfsync_q_ins(st, PFSYNC_S_IACK); pfsync_push(sc); } } @@ -1668,7 +1668,7 @@ pfsync_insert_state(struct pf_state *st) if (sc->sc_len == PFSYNC_MINPKT) callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, V_pfsyncif); - pfsync_q_ins(st, PFSYNC_S_INS, true); + pfsync_q_ins(st, PFSYNC_S_INS); PFSYNC_UNLOCK(sc); st->sync_updates = 0; @@ -1789,7 +1789,7 @@ static void pfsync_update_state(struct pf_state *st) { struct pfsync_softc *sc = V_pfsyncif; - bool sync = false, ref = true; + int sync = 0; PF_STATE_LOCK_ASSERT(st); PFSYNC_LOCK(sc); @@ -1798,7 +1798,7 @@ pfsync_update_state(struct pf_state *st) pfsync_undefer_state(st, 0); if (st->state_flags & PFSTATE_NOSYNC) { if (st->sync_state != PFSYNC_S_NONE) - pfsync_q_del(st, true); + pfsync_q_del(st); PFSYNC_UNLOCK(sc); return; } @@ -1815,17 +1815,14 @@ pfsync_update_state(struct pf_state *st) if (st->key[PF_SK_WIRE]->proto == IPPROTO_TCP) { st->sync_updates++; if (st->sync_updates >= sc->sc_maxupdates) - sync = true; + sync = 1; } break; case PFSYNC_S_IACK: - pfsync_q_del(st, false); - ref = false; - /* FALLTHROUGH */ - + pfsync_q_del(st); case PFSYNC_S_NONE: - pfsync_q_ins(st, PFSYNC_S_UPD_C, ref); + pfsync_q_ins(st, PFSYNC_S_UPD_C); st->sync_updates = 0; break; @@ -1883,14 +1880,13 @@ static void pfsync_update_state_req(struct pf_state *st) { struct pfsync_softc *sc = V_pfsyncif; - bool ref = true; PF_STATE_LOCK_ASSERT(st); PFSYNC_LOCK(sc); if (st->state_flags & PFSTATE_NOSYNC) { if (st->sync_state != PFSYNC_S_NONE) - pfsync_q_del(st, true); + pfsync_q_del(st); PFSYNC_UNLOCK(sc); return; } @@ -1898,12 +1894,9 @@ pfsync_update_state_req(struct pf_state switch (st->sync_state) { case PFSYNC_S_UPD_C: case PFSYNC_S_IACK: - pfsync_q_del(st, false); - ref = false; - /* FALLTHROUGH */ - + pfsync_q_del(st); case PFSYNC_S_NONE: - pfsync_q_ins(st, PFSYNC_S_UPD, true); + pfsync_q_ins(st, PFSYNC_S_UPD); pfsync_push(sc); break; @@ -1924,14 +1917,13 @@ static void pfsync_delete_state(struct pf_state *st) { struct pfsync_softc *sc = V_pfsyncif; - bool ref = true; PFSYNC_LOCK(sc); if (st->state_flags & PFSTATE_ACK) pfsync_undefer_state(st, 1); if (st->state_flags & PFSTATE_NOSYNC) { if (st->sync_state != PFSYNC_S_NONE) - pfsync_q_del(st, true); + pfsync_q_del(st); PFSYNC_UNLOCK(sc); return; } @@ -1939,27 +1931,30 @@ pfsync_delete_state(struct pf_state *st) if (sc->sc_len == PFSYNC_MINPKT) callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, V_pfsyncif); + pf_ref_state(st); + switch (st->sync_state) { case PFSYNC_S_INS: /* We never got to tell the world so just forget about it. */ - pfsync_q_del(st, true); + pfsync_q_del(st); break; case PFSYNC_S_UPD_C: case PFSYNC_S_UPD: case PFSYNC_S_IACK: - pfsync_q_del(st, false); - ref = false; - /* FALLTHROUGH */ + pfsync_q_del(st); + /* FALLTHROUGH to putting it on the del list */ case PFSYNC_S_NONE: - pfsync_q_ins(st, PFSYNC_S_DEL, ref); + pfsync_q_ins(st, PFSYNC_S_DEL); break; default: panic("%s: unexpected sync state %d", __func__, st->sync_state); } + pf_release_state(st); + PFSYNC_UNLOCK(sc); } @@ -1987,7 +1982,7 @@ pfsync_clear_states(u_int32_t creatorid, } static void -pfsync_q_ins(struct pf_state *st, int q, bool ref) +pfsync_q_ins(struct pf_state *st, int q) { struct pfsync_softc *sc = V_pfsyncif; size_t nlen = pfsync_qs[q].len; @@ -2011,12 +2006,11 @@ pfsync_q_ins(struct pf_state *st, int q, sc->sc_len += nlen; TAILQ_INSERT_TAIL(&sc->sc_qs[q], st, sync_list); st->sync_state = q; - if (ref) - pf_ref_state(st); + pf_ref_state(st); } static void -pfsync_q_del(struct pf_state *st, bool unref) +pfsync_q_del(struct pf_state *st) { struct pfsync_softc *sc = V_pfsyncif; int q = st->sync_state; @@ -2028,8 +2022,7 @@ pfsync_q_del(struct pf_state *st, bool u sc->sc_len -= pfsync_qs[q].len; TAILQ_REMOVE(&sc->sc_qs[q], st, sync_list); st->sync_state = PFSYNC_S_NONE; - if (unref) - pf_release_state(st); + pf_release_state(st); if (TAILQ_EMPTY(&sc->sc_qs[q])) sc->sc_len -= sizeof(struct pfsync_subheader);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201612091800.uB9I0jBN088344>