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'.