Commit Graph

19503 Commits

Author SHA1 Message Date
Brian Behlendorf 78cb5e6f60 Merge commit 'refs/top-bases/fix-branch' into fix-branch 2010-06-29 10:12:04 -07:00
Brian Behlendorf 51a936233f Merge branch 'fix-stack-dsl_dataset_destroy' into refs/top-bases/fix-branch 2010-06-29 10:12:03 -07:00
Brian Behlendorf aa90238713 Merge branch 'fix-pthreads' into refs/top-bases/fix-branch 2010-06-29 10:12:03 -07:00
Brian Behlendorf eabeea3b7c New TopGit dependency: fix-stack-dsl_dataset_destroy 2010-06-29 10:12:00 -07:00
Brian Behlendorf 7334572416 Reduce stack usage by dsl_dataset_destroy()
Move dsl_dataset_t local variable from the stack to the heap.
This reduces the stack usage of this function from 2048 bytes
to 176 bytes for x84_64 arches.
2010-06-29 10:11:32 -07:00
Brian Behlendorf 9af7aa53eb Set stack frame limit
For all module/library functions ensure so stack frame exceeds 1024
bytes.  Ideally this should be set lower to say 512 bytes but there
are still numerous functions which exceed even this limit.  For now
this is set to 1024 to ensure we catch the worst offenders.

Additionally, set the limit for ztest to 1024 bytes since the idea
here is to catch stack issues in user space before we find them by
overrunning a kernel stack.  This should also be reduced to 512
bytes as soon as all the trouble makes are fixed.

Finally, add -fstack-check to gcc build options when --enable-debug
is specified at configure time.  This ensures that each page on the
stack will be touched and we will generate a segfault on stack
overflow.

Over time we can gradually fix the following functions:

536 zfs:dsl_deadlist_regenerate
536 zfs:dsl_load_sets
536 zfs:zil_parse
544 zfs:zfs_ioc_recv
552 zfs:dsl_deadlist_insert_bpobj
552 zfs:vdev_dtl_sync
584 zfs:copy_create_perms
608 zfs:ddt_class_contains
608 zfs:ddt_prefetch
608 zfs:__dprintf
616 zfs:ddt_lookup
648 zfs:dsl_scan_ddt
696 zfs:dsl_deadlist_merge
736 zfs:ddt_zap_walk
744 zfs:dsl_prop_get_all_impl
872 zfs:dnode_evict_dbufs
2010-06-29 10:08:48 -07:00
Brian Behlendorf 6fe1e37a5e Additional pthread related fixes for ztest
There are 3 fixes in thie commit.  First, update ztest_run() to store
the thread id and not the address of the kthread_t.  This will be freed
on thread exit and is not safe to use.  This is pretty close to how
things were done in the original ztest code before I got there.

Second, for extra paranoia update thread_exit() to return a special
TS_MAGIC value via pthread_exit().  This value is then verified in
pthread_join() to ensure the thread exited cleanly.  This can be
done cleanly because the kthread doesn't provide a return code
mechanism we need to worry about.

Third, replace the ztest deadman thread with a signal handler.  We
cannot use the previous approach because the correct behavior for
pthreads is to wait for all threads to exit before terminating the
process.  Since the deadman thread won't call exit by design we
end up hanging in kernel_exit().  To avoid this we just setup a
SIGALRM signal handle and register a deadman alarm.  IMHO this
is simpler and cleaner anyway.
2010-06-29 10:06:09 -07:00
Brian Behlendorf ef8c360611 Merge branch 'linux-spa-thread' into refs/top-bases/linux-zfs-branch 2010-06-28 11:32:51 -07:00
Brian Behlendorf d8ebc2ab21 Merge commit 'refs/top-bases/linux-spa-thread' into linux-spa-thread 2010-06-28 11:32:49 -07:00
Brian Behlendorf 58a4452bfc Merge branch 'linux-topology' into refs/top-bases/linux-zfs-branch 2010-06-28 11:32:44 -07:00
Brian Behlendorf 799b8788a9 Merge commit 'refs/top-bases/linux-topology' into linux-topology 2010-06-28 11:32:41 -07:00
Brian Behlendorf c0ad9a1962 Merge branch 'linux-sha2' into refs/top-bases/linux-zfs-branch 2010-06-28 11:32:36 -07:00
Brian Behlendorf 086e6034ca Merge commit 'refs/top-bases/linux-sha2' into linux-sha2 2010-06-28 11:32:34 -07:00
Brian Behlendorf a9e5d32fb8 Merge branch 'linux-user-util' into refs/top-bases/linux-zfs-branch 2010-06-28 11:32:28 -07:00
Brian Behlendorf 4975fd71de Merge commit 'refs/top-bases/linux-user-util' into linux-user-util 2010-06-28 11:32:26 -07:00
Brian Behlendorf 55ce8b9e36 Merge branch 'linux-events' into refs/top-bases/linux-zfs-branch 2010-06-28 11:32:21 -07:00
Brian Behlendorf 90fa1ce7d6 Merge commit 'refs/top-bases/linux-events' into linux-events 2010-06-28 11:32:19 -07:00
Brian Behlendorf 5a8c1a3f95 Merge branch 'linux-kernel-module' into refs/top-bases/linux-zfs-branch 2010-06-28 11:32:13 -07:00
Brian Behlendorf ae2285b17d Merge commit 'refs/top-bases/linux-kernel-module' into linux-kernel-module 2010-06-28 11:32:11 -07:00
Brian Behlendorf f3924aea0e Merge branch 'linux-kernel-device' into refs/top-bases/linux-zfs-branch 2010-06-28 11:32:05 -07:00
Brian Behlendorf d843c10d7e Merge commit 'refs/top-bases/linux-kernel-device' into linux-kernel-device 2010-06-28 11:32:03 -07:00
Brian Behlendorf db396bcda0 Merge branch 'linux-have-idmap' into refs/top-bases/linux-zfs-branch 2010-06-28 11:31:58 -07:00
Brian Behlendorf 456ae258ee Merge commit 'refs/top-bases/linux-have-idmap' into linux-have-idmap 2010-06-28 11:31:56 -07:00
Brian Behlendorf f44dd08b58 Merge branch 'linux-ztest' into refs/top-bases/linux-zfs-branch 2010-06-28 11:31:50 -07:00
Brian Behlendorf 01f2707edd Merge commit 'refs/top-bases/linux-ztest' into linux-ztest 2010-06-28 11:31:48 -07:00
Brian Behlendorf 699cf2179f Merge branch 'linux-unused' into refs/top-bases/linux-zfs-branch 2010-06-28 11:31:42 -07:00
Brian Behlendorf c28d601c0d Merge commit 'refs/top-bases/linux-unused' into linux-unused 2010-06-28 11:31:40 -07:00
Brian Behlendorf f6ad0de60a Merge branch 'linux-libspl' into refs/top-bases/linux-zfs-branch 2010-06-28 11:31:35 -07:00
Brian Behlendorf 99cf2d2228 Merge commit 'refs/top-bases/linux-libspl' into linux-libspl 2010-06-28 11:31:33 -07:00
Brian Behlendorf b2313a226a Merge branch 'linux-zpios' into refs/top-bases/linux-zfs-branch 2010-06-28 11:31:27 -07:00
Brian Behlendorf 2a6d923e62 Merge commit 'refs/top-bases/linux-zpios' into linux-zpios 2010-06-28 11:31:25 -07:00
Brian Behlendorf 0528b9769b Merge branch 'linux-user-disk' into refs/top-bases/linux-zfs-branch 2010-06-28 11:31:19 -07:00
Brian Behlendorf fbed3151dd Merge commit 'refs/top-bases/linux-user-disk' into linux-user-disk 2010-06-28 11:31:17 -07:00
Brian Behlendorf dc3e2f3f92 Merge branch 'linux-symbol-collisions' into refs/top-bases/linux-zfs-branch 2010-06-28 11:31:11 -07:00
Brian Behlendorf 4452e42d9c Merge commit 'refs/top-bases/linux-symbol-collisions' into linux-symbol-collisions 2010-06-28 11:31:09 -07:00
Brian Behlendorf 759df09df2 Merge branch 'linux-kernel-mem' into refs/top-bases/linux-zfs-branch 2010-06-28 11:31:03 -07:00
Brian Behlendorf 7b16b35821 Merge commit 'refs/top-bases/linux-kernel-mem' into linux-kernel-mem 2010-06-28 11:31:01 -07:00
Brian Behlendorf 61adb3379a Merge branch 'linux-kernel-disk' into refs/top-bases/linux-zfs-branch 2010-06-28 11:30:55 -07:00
Brian Behlendorf 6412189f1b Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-06-28 11:30:53 -07:00
Brian Behlendorf c02813baef Merge branch 'linux-have-spl-debug' into refs/top-bases/linux-zfs-branch 2010-06-28 11:30:47 -07:00
Brian Behlendorf 671f1fbf43 Merge commit 'refs/top-bases/linux-have-spl-debug' into linux-have-spl-debug 2010-06-28 11:30:45 -07:00
Brian Behlendorf 5b33cbea31 Merge branch 'linux-have-mntent' into refs/top-bases/linux-zfs-branch 2010-06-28 11:30:39 -07:00
Brian Behlendorf d6af6c6ad2 Merge commit 'refs/top-bases/linux-have-mntent' into linux-have-mntent 2010-06-28 11:30:37 -07:00
Brian Behlendorf 843af873bf Merge commit 'refs/top-bases/zfs-branch' into zfs-branch 2010-06-28 11:30:36 -07:00
Brian Behlendorf 17a1689bd4 Merge branch 'gcc-branch' into refs/top-bases/zfs-branch 2010-06-28 11:30:35 -07:00
Brian Behlendorf 9a29d55b2f Merge commit 'refs/top-bases/gcc-branch' into gcc-branch 2010-06-28 11:30:34 -07:00
Brian Behlendorf c2793dd0c7 Merge branch 'gcc-missing-braces' into refs/top-bases/gcc-branch 2010-06-28 11:30:34 -07:00
Brian Behlendorf f32ec2346b Linux bcopy() requires word aligned memory, use memcpy()
Much to my surprise bcopy() under Linux appears to copy the data in
word sized chunks.  It does the right thing but if you buffer is not
a multiple of the word size you will be reading past the end of your
buffer.  Or at least that is what valgrind is reporting.  We should
be using mempcy() anyway on Linux so replace bcopy() with memcpy()
to resolve the issue.

==305== Thread 211:
==305== Invalid read of size 8
==305==    at 0x3BCD28357D: _wordcopy_fwd_dest_aligned (in /lib64/libc-2.11.1.so)
==305==    by 0x3BCD282B05: bcopy (in /lib64/libc-2.11.1.so)
==305==    by 0x58D7FEF: dmu_write (dmu.c:730)
==305==    by 0x591C942: spa_history_write (spa_history.c:165)
==305==    by 0x591D255: spa_history_log_sync (spa_history.c:277)
==305==    by 0x591D545: log_internal (spa_history.c:450)
==305==    by 0x591D5EC: spa_history_log_internal (spa_history.c:475)
==305==    by 0x5902319: dsl_prop_set_sync (dsl_prop.c:707)
==305==    by 0x5906A7D: dsl_sync_task_group_sync (dsl_synctask.c:199)
==305==    by 0x58FF4EC: dsl_pool_sync (dsl_pool.c:376)
==305==    by 0x591744C: spa_sync (spa.c:5365)
==305==    by 0x5922C85: txg_sync_thread (txg.c:414)
2010-06-28 11:26:20 -07:00
Brian Behlendorf 882ec504ea Minor ztest fixes
Move create/destroy function to correct places.  I'm not sure why
this wasn't caught upstream it should have been, regardless let's
just fix it here.

Personally I find it handy to be able to enable full debugging in
zfs with the 'debug=' command line option so I'm enabled that as
well.
2010-06-28 11:23:50 -07:00
Brian Behlendorf 4970b635e8 Revert to original debugging
The ZFS defaults are fine, revert to them.
2010-06-28 10:58:16 -07:00