Print this page
3752 want more verifiable dbuf user eviction
Submitted by:   Justin Gibbs <justing@spectralogic.com>
Submitted by:   Will Andrews <willa@spectralogic.com>

@@ -215,14 +215,12 @@
          */
         list_node_t db_link;
 
         /* Data which is unique to data (leaf) blocks: */
 
-        /* stuff we store for the user (see dmu_buf_set_user) */
-        void *db_user_ptr;
-        void **db_user_data_ptr_ptr;
-        dmu_buf_evict_func_t *db_evict_func;
+        /* User callback information.  See dmu_buf_set_user(). */
+        dmu_buf_user_t *db_user;
 
         uint8_t db_immediate_evict;
         uint8_t db_freed_in_flight;
 
         uint8_t db_dirtycnt;

@@ -271,12 +269,12 @@
 void dmu_buf_fill_done(dmu_buf_t *db, dmu_tx_t *tx);
 void dbuf_assign_arcbuf(dmu_buf_impl_t *db, arc_buf_t *buf, dmu_tx_t *tx);
 dbuf_dirty_record_t *dbuf_dirty(dmu_buf_impl_t *db, dmu_tx_t *tx);
 arc_buf_t *dbuf_loan_arcbuf(dmu_buf_impl_t *db);
 
-void dbuf_clear(dmu_buf_impl_t *db);
-void dbuf_evict(dmu_buf_impl_t *db);
+void dbuf_clear(dmu_buf_impl_t *db, list_t *evict_list_p);
+void dbuf_evict(dmu_buf_impl_t *db, list_t *evict_list_p);
 
 void dbuf_setdirty(dmu_buf_impl_t *db, dmu_tx_t *tx);
 void dbuf_unoverride(dbuf_dirty_record_t *dr);
 void dbuf_sync_list(list_t *list, dmu_tx_t *tx);
 void dbuf_release_bp(dmu_buf_impl_t *db);