panic: mb_dtor_pack: ref_cnt != 1

Andre Oppermann andre at freebsd.org
Sat Nov 5 11:47:25 PST 2005


Gleb Smirnoff wrote:
> 
> On Sat, Nov 05, 2005 at 11:01:16AM +0300, Gleb Smirnoff wrote:
> T> On Sat, Nov 05, 2005 at 05:41:05AM +0200, Giorgos Keramidas wrote:
> T> G> On 2005-11-05 03:34, Gleb Smirnoff <glebius at freebsd.org> wrote:
> T> G> >   Andre, Thierry, Sam,
> T> G> >
> T> G> >   this patch should fix the problems
> T> G>
> T> G> But it panics in mb_dtor_pack() because ext_type != EXT_CLUSTER
> T> G> when my ath0 interface tries to associate with an AP.
> T> G>
> T> G> I had to change this too, to make things work:
> T>
> T> Updated patch.
> 
> One more update. Since I have removed this block:
> 
>                        if (*(m->m_ext.ref_cnt) == 0)
>                                *(m->m_ext.ref_cnt) = 1;
> 
> I have also altered KASSERT in mb_dtor_pack(). I don't like
> inventing an incorrect invariant check and then adding helpers
> to avoid it being triggered.

This block is still required for the packet zone as the refcount
is not re-initialized for mbuf+cluster out of the packet zone.
You may up with wrong refcounts if you remove this check.  It
is not directly related to the KASSERT in mb_dtor_pack() but to
the way atomic_fetchadd_int() works in concurrency situations.

I have committed a fix to the same effect as your proposed patch.
When UMA is fixed this may be reverted again.

-- 
Andre


More information about the freebsd-current mailing list