Download raw body.
check if the pf_state pointer is NULL less often in pf_test()
check if the pf_state pointer is NULL less often in pf_test()
On Wed, Apr 30, 2025 at 02:43:14PM +1000, David Gwynne wrote:
> there should be no functional change with this diff, it just shuffles
> the code around.
>
> note that pf_state structs always have valid references to pf_state_keys
> until the pf_state itself is destroyed after pf.c r1.1157. this means we
> don't have to test if the st->key[PF_SK_STACK] pointers are valid
> anymore, we can just use them.
>
> ok?
looks good to me. thanks.
OK sashan
>
> Index: pf.c
> ===================================================================
> RCS file: /cvs/src/sys/net/pf.c,v
> diff -u -p -r1.1209 pf.c
> --- pf.c 14 Apr 2025 20:02:34 -0000 1.1209
> +++ pf.c 30 Apr 2025 04:38:04 -0000
> @@ -7910,15 +7910,20 @@ done:
>
> if (action == PF_PASS && qid)
> pd.m->m_pkthdr.pf.qid = qid;
> - if (pd.dir == PF_IN && st && st->key[PF_SK_STACK])
> - pf_mbuf_link_state_key(pd.m, st->key[PF_SK_STACK]);
> - if (pd.dir == PF_OUT && st && st->key[PF_SK_STACK])
> - pf_state_key_link_inpcb(st->key[PF_SK_STACK],
> - pd.m->m_pkthdr.pf.inp);
> + if (st != NULL) {
> + struct mbuf *m = pd.m;
> + struct inpcb *inp = m->m_pkthdr.pf.inp;
>
> - if (st != NULL && !ISSET(pd.m->m_pkthdr.csum_flags, M_FLOWID)) {
> - pd.m->m_pkthdr.ph_flowid = st->key[PF_SK_WIRE]->hash;
> - SET(pd.m->m_pkthdr.csum_flags, M_FLOWID);
> + if (pd.dir == PF_IN) {
> + KASSERT(inp == NULL);
> + pf_mbuf_link_state_key(m, st->key[PF_SK_STACK]);
> + } else if (pd.dir == PF_OUT)
> + pf_state_key_link_inpcb(st->key[PF_SK_STACK], inp);
> +
> + if (!ISSET(m->m_pkthdr.csum_flags, M_FLOWID)) {
> + m->m_pkthdr.ph_flowid = st->key[PF_SK_WIRE]->hash;
> + SET(m->m_pkthdr.csum_flags, M_FLOWID);
> + }
> }
>
> /*
>
check if the pf_state pointer is NULL less often in pf_test()
check if the pf_state pointer is NULL less often in pf_test()