Print this page
6267 dn_bonus evicted too early
Reviewed by: Richard Yao <ryao@gentoo.org>
Reviewed by: Xin LI <delphij@freebsd.org>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Approved by: Richard Lowe <richlowe@richlowe.net>

@@ -231,13 +231,29 @@
         /* Data which is unique to data (leaf) blocks: */
 
         /* User callback information. */
         dmu_buf_user_t *db_user;
 
-        uint8_t db_immediate_evict;
+        /*
+         * Evict user data as soon as the dirty and reference
+         * counts are equal.
+         */
+        uint8_t db_user_immediate_evict;
+
+        /*
+         * This block was freed while a read or write was
+         * active.
+         */
         uint8_t db_freed_in_flight;
 
+        /*
+         * dnode_evict_dbufs() or dnode_evict_bonus() tried to
+         * evict this dbuf, but couldn't due to outstanding
+         * references.  Evict once the refcount drops to 0.
+         */
+        uint8_t db_pending_evict;
+
         uint8_t db_dirtycnt;
 } dmu_buf_impl_t;
 
 /* Note: the dbuf hash table is exposed only for the mdb module */
 #define DBUF_MUTEXES 256