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,27 +1786,26 @@
         }
         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).
+ * 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 (space > 0)
-                space = 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);
+        }
 
-        if (ds)
-                dsl_dir_willuse_space(ds->ds_dir, space, tx);
-
-        dmu_tx_willuse_space(tx, space);
+        dmu_tx_willuse_space(tx, aspace);
 }
 
 /*
  * Scans a block at the indicated "level" looking for a hole or data,
  * depending on 'flags'.