Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Sep 2015 16:46:34 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-fs@FreeBSD.org
Subject:   [Bug 202607] [panic] Poudriere umounting file systems causes 'solaris assert: avl_is_empty(&dn->dn_dbufs)' panic
Message-ID:  <bug-202607-3630-TVKEXbkB7W@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-202607-3630@https.bugs.freebsd.org/bugzilla/>
References:  <bug-202607-3630@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=202607

--- Comment #19 from Justin T. Gibbs <gibbs@FreeBSD.org> ---
Thinking about this some more, I think it may be possible for a dbuf for an
older version of a dnode to be reused if it hasn't been evicted before the
object id is reused. For most objects (e.g. files), there are no dangling
references due to dbuf user eviction. But this can happen for datasets, and we
can't know the future type of the object that will inherit this object id.

My preference would be some solution that doesn't cause TXG syncing to block.
All we need to do is to mark all the dbufs as no longer cacheable in
dnode_evict_dbufs() during the pass that we try to evict them. This would allow
dbuf_rele_and_unlock() to determine whether eviction processing is necessary
without taking the dnode lock. It looks like dmu_buf_impl_t has internal
padding due to the order of its fields, so this state can probably be added
without any space penalty.

If you do this, the code to forcibly evict the bonus buffer in
dbuf_rele_and_unlock() should be simplified to use the same logic.

-- 
You are receiving this mail because:
You are the assignee for the bug.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-202607-3630-TVKEXbkB7W>