Print this page
4045 zfs write throttle & i/o scheduler performance work
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
*** 1786,1812 ****
}
mutex_exit(&dn->dn_mtx);
}
/*
! * Call when we think we're going to write/free space in open context.
! * Be conservative (ie. OK to write less than this or free more than
! * this, but don't write more or free less).
*/
void
dnode_willuse_space(dnode_t *dn, int64_t space, dmu_tx_t *tx)
{
objset_t *os = dn->dn_objset;
dsl_dataset_t *ds = os->os_dsl_dataset;
! if (space > 0)
! space = spa_get_asize(os->os_spa, space);
! if (ds)
! dsl_dir_willuse_space(ds->ds_dir, space, tx);
!
! dmu_tx_willuse_space(tx, space);
}
/*
* Scans a block at the indicated "level" looking for a hole or data,
* depending on 'flags'.
--- 1786,1811 ----
}
mutex_exit(&dn->dn_mtx);
}
/*
! * Call when we think we're going to write/free space in open context to track
! * the amount of memory in use by the currently open txg.
*/
void
dnode_willuse_space(dnode_t *dn, int64_t space, dmu_tx_t *tx)
{
objset_t *os = dn->dn_objset;
dsl_dataset_t *ds = os->os_dsl_dataset;
+ int64_t aspace = spa_get_asize(os->os_spa, space);
! if (ds != NULL) {
! dsl_dir_willuse_space(ds->ds_dir, aspace, tx);
! dsl_pool_dirty_space(dmu_tx_pool(tx), space, tx);
! }
! dmu_tx_willuse_space(tx, aspace);
}
/*
* Scans a block at the indicated "level" looking for a hole or data,
* depending on 'flags'.