Print this page
patch first-pass
*** 531,541 ****
/*
* Asynchronous user eviction callback state.
*/
taskq_ent_t dbu_tqent;
! /* This instance's eviction function pointer. */
dmu_buf_evict_func_t *dbu_evict_func;
#ifdef ZFS_DEBUG
/*
* Pointer to user's dbuf pointer. NULL for clients that do
* not associate a dbuf with their user data.
--- 531,547 ----
/*
* Asynchronous user eviction callback state.
*/
taskq_ent_t dbu_tqent;
! /*
! * This instance's eviction function pointers.
! *
! * dbu_evict_func_prep is called synchronously while dbu_evict_func
! * is executed asynchronously on a taskq.
! */
! dmu_buf_evict_func_t *dbu_evict_func_prep;
dmu_buf_evict_func_t *dbu_evict_func;
#ifdef ZFS_DEBUG
/*
* Pointer to user's dbuf pointer. NULL for clients that do
* not associate a dbuf with their user data.
*** 555,573 ****
* To allow enforcement of this, dbu must already be zeroed on entry.
*/
#ifdef __lint
/* Very ugly, but it beats issuing suppression directives in many Makefiles. */
extern void
! dmu_buf_init_user(dmu_buf_user_t *dbu, dmu_buf_evict_func_t *evict_func,
! dmu_buf_t **clear_on_evict_dbufp);
#else /* __lint */
inline void
! dmu_buf_init_user(dmu_buf_user_t *dbu, dmu_buf_evict_func_t *evict_func,
! dmu_buf_t **clear_on_evict_dbufp)
{
ASSERT(dbu->dbu_evict_func == NULL);
ASSERT(evict_func != NULL);
dbu->dbu_evict_func = evict_func;
#ifdef ZFS_DEBUG
dbu->dbu_clear_on_evict_dbufp = clear_on_evict_dbufp;
#endif
}
--- 561,581 ----
* To allow enforcement of this, dbu must already be zeroed on entry.
*/
#ifdef __lint
/* Very ugly, but it beats issuing suppression directives in many Makefiles. */
extern void
! dmu_buf_init_user(dmu_buf_user_t *dbu, dmu_buf_evict_func_t *evict_func_prep,
! dmu_buf_evict_func_t *evict_func, dmu_buf_t **clear_on_evict_dbufp);
#else /* __lint */
inline void
! dmu_buf_init_user(dmu_buf_user_t *dbu, dmu_buf_evict_func_t *evict_func_prep,
! dmu_buf_evict_func_t *evict_func, dmu_buf_t **clear_on_evict_dbufp)
{
+ ASSERT(dbu->dbu_evict_func_prep == NULL);
ASSERT(dbu->dbu_evict_func == NULL);
ASSERT(evict_func != NULL);
+ dbu->dbu_evict_func_prep = evict_func_prep;
dbu->dbu_evict_func = evict_func;
#ifdef ZFS_DEBUG
dbu->dbu_clear_on_evict_dbufp = clear_on_evict_dbufp;
#endif
}