On Fri, Jul 15, 2022 at 02:05:12PM +0300, Vitaliy Makkoveev wrote:
> I see no reason to move 'not_ours' checks outside pipex_common_input()
> because this introduce code duplication. Also I see no reason to take
> session lock after pipex_ppp_input() call, because it will be released
> by caller just after successful return. At least fdrelease() has the
> same behavior.

This is better.  Can we get symmetric mutex enter and leave by
splitting pipex_common_input() in two funtions?  The first part
needs the lock and checks whether the packet is ours.

Maybe something like this:

mtx_enter(&session->pxs_mtx);
...
if (pipex_isours()) {
        mtx_leave(&session->pxs_mtx);
        pipex_common_input();
        return (NULL);
}
...
mtx_leave(&session->pxs_mtx);

We could also commit the current code as it is with the locked
paramter and improve in tree.

> @@ -1261,8 +1275,8 @@ pipex_pppoe_input(struct mbuf *m0, struc
>           sizeof(struct pipex_pppoe_header), &pppoe);
>  
>       hlen = sizeof(struct ether_header) + sizeof(struct pipex_pppoe_header);
> -     if ((m0 = pipex_common_input(session, m0, hlen, ntohs(pppoe.length)))
> -         == NULL)
> +     m0 = pipex_common_input(session, m0, hlen, ntohs(pppoe.length), 0);
> +     if (m0 != NULL)
>               return (NULL);
>       m_freem(m0);

Is this the wrong way around?  Should be if (m0 == NULL) return (NULL);

bluhm

Reply via email to