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>