Conserve stack in dsl_scan_visitbp()
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 26 Apr 2011 22:43:07 +0000 (15:43 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 26 Apr 2011 22:48:00 +0000 (15:48 -0700)
This function is called recursively so everything possible must be
done to limit its stack consumption.  The dprintf_bp() debugging
function adds 30 bytes of local variables to the function we cannot
afford.  By commenting out this debugging we save 30 bytes per
recursion and depths of 13 are not uncommon.  This yeilds a total
stack saving of 390 bytes on our 8k stack.

Issue #174

module/zfs/dsl_scan.c

index 421ddd0..e3d2492 100644 (file)
@@ -809,11 +809,18 @@ dsl_scan_visitbp(blkptr_t *bp, const zbookmark_t *zb,
 
        scn->scn_visited_this_txg++;
 
-       dprintf_bp(bp,
-           "visiting ds=%p/%llu zb=%llx/%llx/%llx/%llx buf=%p bp=%p",
-           ds, ds ? ds->ds_object : 0,
-           zb->zb_objset, zb->zb_object, zb->zb_level, zb->zb_blkid,
-           pbuf, bp);
+       /*
+        * This debugging is commented out to conserve stack space.  This
+        * function is called recursively and the debugging addes several
+        * bytes to the stack for each call.  It can be commented back in
+        * if required to debug an issue in dsl_scan_visitbp().
+        *
+        * dprintf_bp(bp,
+        *    "visiting ds=%p/%llu zb=%llx/%llx/%llx/%llx buf=%p bp=%p",
+        *    ds, ds ? ds->ds_object : 0,
+        *    zb->zb_objset, zb->zb_object, zb->zb_level, zb->zb_blkid,
+        *    pbuf, bp);
+        */
 
        if (bp->blk_birth <= scn->scn_phys.scn_cur_min_txg)
                goto out;