Conserve stack in dsl_scan_visitbp()
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 22 Apr 2011 17:12:49 +0000 (10:12 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 26 Apr 2011 20:37:35 +0000 (13:37 -0700)
commit7a060636b05655cccd87ce74d70e5957bb234e5e
treed2ddc53f9ae1c9b3763de90f9933bc6645971053
parent44e9e3479388ee16f39253e8c3f8f6625324dfc6
Conserve stack in dsl_scan_visitbp()

The recursive call chain dsl_scan_visitbp() -> dsl_scan_recurse() ->
dsl_scan_visitdnode() -> dsl_scan_visitbp has been observed to consume
considerable stack resulting in a stack overflow (>8k).  The cleanest
way I see to fix this with minimal impact to the existing flow of
code, and with the fewest performance concerns, is to always inline
dsl_scan_recurse() and dsl_scan_visitdnode().  While this will increase
the function size of dsl_scan_visitbp(), by 4660 bytes, it also reduces
the stack requirements by removing the function call overhead.

Issue #174
module/zfs/dsl_scan.c