Commit Graph

20467 Commits

Author SHA1 Message Date
Ned Bass 4d3fc57112 Reduce stack usage for recursive dbuf_hold_impl()
This commit preserves the recursive function dbuf_hold_impl() but moves
the local variables and function arguments to the heap to minimize
the stack frame size.  Enough space is initially allocated on the
stack for 20 levels of recursion.  This technique was based on commit
34229a2f2a which reduced stack usage of
traverse_visitbp().

dbuf_hold_impl() is mutually recursive with dbuf_findbp(),
but the latter function is also called from other functions.
Therefore dbuf_findbp() must contain logic to determine how to call
dbuf_hold_impl().  To this end, dbuf_hold_impl() now takes a
struct dbuf_hold_impl_data pointer as an argument.  If that argument
is NULL it calls dbuf_hold_impl() as before, otherwise it calls
__debuf_hold_impl() with a single dbuf_hold_impl_data pointer argument.
As the name implies, dbuf_hold_impl_data stores the arguments and local
variables for dbuf_hold_impl().

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2010-08-02 14:12:31 -07:00
Brian Behlendorf c7786edbf0 Initial commit for fix-stack-dbuf_hold_impl topic branch 2010-08-02 14:10:28 -07:00
Brian Behlendorf db488a647c Merge commit 'refs/top-bases/fix-branch' into fix-branch 2010-08-02 14:09:40 -07:00
Brian Behlendorf 2a9adcbffb Merge branch 'fix-stack-dsl_scan_visitbp' into refs/top-bases/fix-branch 2010-08-02 14:09:39 -07:00
Brian Behlendorf 0c6f448b57 New TopGit dependency: fix-stack-dsl_scan_visitbp 2010-08-02 14:09:37 -07:00
Ned Bass 410d8c4e15 Reduce dsl_scan_visitbp stack usage by moving blkptr_t to heap
Github issue 22 reported a stack overrun when the zfs module was
loaded, possibly related to the presence of existing zpools created
under zfs-fuse.  The stack trace showed 9 levels of recursion between
dsl_scan_visitbp() and dsl_scan_recurse(). To reduce stack overhead in
that code path, this commit moves the 128 byte blkptr_t data strucutre
in dsl_scan_visitbp() to the heap.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2010-08-02 14:09:15 -07:00
Brian Behlendorf 911d2e0df4 Initial commit for fix-stack-dsl_scan_visitbp topic branch 2010-08-02 14:08:36 -07:00
Brian Behlendorf 64df38a167 Merge commit 'refs/top-bases/fix-branch' into fix-branch 2010-08-02 14:06:33 -07:00
Brian Behlendorf 425b8742a5 Merge branch 'fix-stack-zio_done' into refs/top-bases/fix-branch 2010-08-02 14:06:32 -07:00
Brian Behlendorf da40cc1454 New TopGit dependency: fix-stack-zio_done 2010-08-02 14:06:29 -07:00
Ned Bass d5658668e0 Reduce stack usage of zio_done
Eliminated local variables pointing to members of the zio struct.
Just refer to the struct members directly.  This saved about 32 bytes per
call, but this function can be called recurisvely up to 19 levels deep,
so we potentially save up to 608 bytes.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2010-08-02 14:05:49 -07:00
Brian Behlendorf df8e5bf1ca Initial commit for fix-stack-zio_done topic branch 2010-08-02 13:58:47 -07:00
Brian Behlendorf f3d8ee7357 Merge branch 'fix-stack-vdev_cache_read' into refs/top-bases/fix-branch 2010-08-02 13:57:39 -07:00
Brian Behlendorf eeea8d2f06 Merge commit 'refs/top-bases/fix-branch' into fix-branch 2010-08-02 13:57:39 -07:00
Brian Behlendorf 530190960a New TopGit dependency: fix-stack-vdev_cache_read 2010-08-02 13:57:36 -07:00
Brian Behlendorf 48669030fe Reduce stack in vdev_cache_read
Moving the vdev_cache_entry_t struct ve_search from the stack to
the heap saves ~100 bytes.
2010-08-02 13:57:15 -07:00
Brian Behlendorf afe4a83c54 Merge branch 'linux-have-mlslabel' into refs/top-bases/linux-zfs-branch 2010-08-02 13:55:24 -07:00
Brian Behlendorf 6786aff344 Merge commit 'refs/top-bases/linux-have-mlslabel' into linux-have-mlslabel 2010-08-02 13:55:22 -07:00
Brian Behlendorf d071e15a8d Merge branch 'linux-spa-thread' into refs/top-bases/linux-zfs-branch 2010-08-02 13:55:17 -07:00
Brian Behlendorf 4824a276d8 Merge commit 'refs/top-bases/linux-spa-thread' into linux-spa-thread 2010-08-02 13:55:15 -07:00
Brian Behlendorf e8b47b7c4e Merge branch 'linux-topology' into refs/top-bases/linux-zfs-branch 2010-08-02 13:55:09 -07:00
Brian Behlendorf 511aac76cc Merge commit 'refs/top-bases/linux-topology' into linux-topology 2010-08-02 13:55:07 -07:00
Brian Behlendorf 65369210be Merge branch 'linux-sha2' into refs/top-bases/linux-zfs-branch 2010-08-02 13:55:01 -07:00
Brian Behlendorf fc13234328 Merge commit 'refs/top-bases/linux-sha2' into linux-sha2 2010-08-02 13:54:59 -07:00
Brian Behlendorf 317bdbd316 Merge branch 'linux-user-util' into refs/top-bases/linux-zfs-branch 2010-08-02 13:54:53 -07:00
Brian Behlendorf 31098332ce Merge commit 'refs/top-bases/linux-user-util' into linux-user-util 2010-08-02 13:54:51 -07:00
Brian Behlendorf eea09e5428 Merge branch 'linux-events' into refs/top-bases/linux-zfs-branch 2010-08-02 13:54:45 -07:00
Brian Behlendorf 70e03678eb Merge commit 'refs/top-bases/linux-events' into linux-events 2010-08-02 13:54:43 -07:00
Brian Behlendorf 1170c5fb66 Merge branch 'linux-kernel-module' into refs/top-bases/linux-zfs-branch 2010-08-02 13:54:38 -07:00
Brian Behlendorf 372ea3bb89 Merge commit 'refs/top-bases/linux-kernel-module' into linux-kernel-module 2010-08-02 13:54:36 -07:00
Brian Behlendorf eb2785121c Merge branch 'linux-kernel-device' into refs/top-bases/linux-zfs-branch 2010-08-02 13:54:30 -07:00
Brian Behlendorf 870b549f34 Merge commit 'refs/top-bases/linux-kernel-device' into linux-kernel-device 2010-08-02 13:54:27 -07:00
Brian Behlendorf 11f78903ce Merge branch 'linux-have-idmap' into refs/top-bases/linux-zfs-branch 2010-08-02 13:54:22 -07:00
Brian Behlendorf ec2908d41d Merge commit 'refs/top-bases/linux-have-idmap' into linux-have-idmap 2010-08-02 13:54:20 -07:00
Brian Behlendorf 83210002b5 Merge branch 'linux-ztest' into refs/top-bases/linux-zfs-branch 2010-08-02 13:54:14 -07:00
Brian Behlendorf 640f5d9bdd Merge commit 'refs/top-bases/linux-ztest' into linux-ztest 2010-08-02 13:54:12 -07:00
Brian Behlendorf c09a76482a Merge branch 'linux-unused' into refs/top-bases/linux-zfs-branch 2010-08-02 13:54:06 -07:00
Brian Behlendorf 322761f3bb Merge commit 'refs/top-bases/linux-unused' into linux-unused 2010-08-02 13:54:03 -07:00
Brian Behlendorf 7d01d9e14a Merge branch 'linux-libspl' into refs/top-bases/linux-zfs-branch 2010-08-02 13:53:57 -07:00
Brian Behlendorf 93011db8a0 Merge commit 'refs/top-bases/linux-libspl' into linux-libspl 2010-08-02 13:53:55 -07:00
Brian Behlendorf 28797e3c24 Merge branch 'linux-zpios' into refs/top-bases/linux-zfs-branch 2010-08-02 13:53:49 -07:00
Brian Behlendorf ae9b59dc57 Merge commit 'refs/top-bases/linux-zpios' into linux-zpios 2010-08-02 13:53:47 -07:00
Brian Behlendorf 709f29d4b4 Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2010-08-02 13:53:41 -07:00
Brian Behlendorf e34cd4b934 Merge commit 'refs/top-bases/linux-user-disk' into linux-user-disk 2010-08-02 13:53:39 -07:00
Brian Behlendorf cec941cc50 Merge branch 'linux-symbol-collisions' into refs/top-bases/linux-zfs-branch 2010-08-02 13:53:33 -07:00
Brian Behlendorf 41adcd0edc Merge commit 'refs/top-bases/linux-symbol-collisions' into linux-symbol-collisions 2010-08-02 13:53:31 -07:00
Brian Behlendorf a1a351a609 Merge branch 'linux-kernel-mem' into refs/top-bases/linux-zfs-branch 2010-08-02 13:53:25 -07:00
Brian Behlendorf 68cfa060f7 Merge commit 'refs/top-bases/linux-kernel-mem' into linux-kernel-mem 2010-08-02 13:53:23 -07:00
Brian Behlendorf 5fd80ff7ef Merge branch 'linux-kernel-disk' into refs/top-bases/linux-zfs-branch 2010-08-02 13:53:17 -07:00
Brian Behlendorf b4c4755bb0 Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-08-02 13:53:15 -07:00