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