Commit Graph

4131 Commits

Author SHA1 Message Date
Ned Bass bb20b03060 Move ztest_od_t structures to the heap
A number of ztest functions create one or more 312B ztest_od_t data
structures.  To conserve stack usage, this commit moves all of these data
structures to the heap.  However, I am still seeing ztest segfaults due
to heavy stack usage of the dbuf_findbp() -> dbuf_hold_impl() recursion.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2010-08-02 13:42:25 -07:00
Brian Behlendorf 1f3c757320 Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-08-02 13:22:13 -07:00
Brian Behlendorf 0fee5e7ac8 Merge commit 'refs/top-bases/zfs-branch' into zfs-branch 2010-08-02 13:21:53 -07:00
Brian Behlendorf 7b8a233029 Merge branch 'fix-branch' into refs/top-bases/zfs-branch 2010-08-02 13:21:52 -07:00
Brian Behlendorf bb064e0220 Merge branch 'fix-taskq' into refs/top-bases/fix-branch 2010-08-02 13:21:51 -07:00
Brian Behlendorf c90ad869ca Merge commit 'refs/top-bases/fix-branch' into fix-branch 2010-08-02 13:21:51 -07:00
Brian Behlendorf 5545adeadf Use sparse files for loopback+file configurations
Using sparse files for the test configurations had atleast three
significant advantages.

1) Actually test sparse files to ensure they work.
2) Drastically reduce required disk space for the regression test
   suite.  This turns out to be fairly important when running the
   test suite in a virtualized environment.
3) Significantly speed of the test suite.  Run time of zconfig.sh
   dropped from 2m:56s to 1m:00s on my test system, zpios-sanity.sh
   nows runs in only 0m:26s.
2010-08-02 13:16:41 -07:00
Brian Behlendorf 858985a46e Update zconfig.sh
This change updates zconfig.sh to reference /dev/zvol/ instead
of simply /dev/.  It also extends the texts to verify correct
minor device creation for import/export and module load/unload.
2010-08-02 13:15:00 -07:00
Ricardo M. Correia 4ca4dfe9bb Fix taskq_dispatch() call in zio_taskq_dispatch().
The feature branch 'fix-taskq' in Linux's ZFS tree changes the taskq_dispatch()
flag from TQ_SLEEP to TQ_NOSLEEP to avoid sleeping in some circumstances.

However, this has the side effect that taskq_dispatch() now may fail, and since
the return code was not even being checked, it could lead to zio's not being
scheduled to execute.

I'm fixing this in a simplistic but not very elegant way, by just looping until
taskq_dispatch() succeeds.

Signed-off-by: Ricardo M. Correia <ricardo.correia@oracle.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2010-08-02 13:12:54 -07:00
Brian Behlendorf dd9a55895a Revert zconfig.sh test 4
This test was accidentally readded to the linux-kernel-disk
topic branch.  It is being reverted so it can be reapplied with
a few minor tweaks in the right place.
2010-08-02 11:53:38 -07:00
Brian Behlendorf 7195d18e6a Reduce stack using in ZVOL
The dmu_object_info_t structures which are roughly 60 bytes
have been moved from the stack to the heap.  Every little
bit helps and there's absolutely no reason these temporary
working variables need to be on the stack.
2010-08-02 11:51:21 -07:00
Brian Behlendorf 88b37fbe57 Fix zvol_init() lock inversion
During module load we could deadlock because the zvol_init()
callpath took the spa_namespace_lock before the zvol_state_lock.
The rest of the zvol code takes the locks in the opposite order.
In particular, I observed the following deadlock cause by the
lock inversion.

I've fixed the ording by creating an unlocked version of
zvol_create_minor and zvol_remove_minor.  This allows me to
take the zvol_state_lock before the spa_namespace_lock in
zvol_cr_minors_common and simply call the unlocked version.
2010-08-02 11:50:04 -07:00
Brian Behlendorf f162433deb Minor device creation/removal (Kernel)
With the update to onnv_141 how minor devices were created and
removed for ZVOL was substantially changed.  The updated system
is much more tightly integrated with Solaris's /dev/ filesystem.
This is great for Solaris but bad for Linux.

On the kernel side the ZFS_IOC_{CREATE,REMOVE}_MINOR ioctl
entry points have been re-added.  They now call directly in
to the ZVOL to create the needed minor node and add the sysfs
entried for udev.

Also as part of this change I've decided it would really be
best if all the zvols were in a /dev/zvol directory like on
Solaris.  Organizationally this makes sense and on the code
side it allows us to know a block device is a zvol simply by
where it is located in /dev/.  Unless Solaris there still is
to ./dsk or ./rdsk as part of the path.
2010-08-02 11:49:08 -07:00
Brian Behlendorf 96ae916dbe Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-07-28 16:52:38 -07:00
Brian Behlendorf 1510a95acd Add splat module to zfs.sh script
The splat module is only needed for the spl regression tests.
But if we add it to MODULES then 'zfs.sh -u' will be able to
unload it if needed,  The downside if 'zfs.sh' will always
load it but it's overhead is minimal and in a production
setting you'll always be doing a 'modprobe zfs' anyway so
this is really just for testing.
2010-07-28 16:47:30 -07:00
Brian Behlendorf 9662934bd9 Add uninstall Makefile targets
Extend the Makefiles with an uninstall target to cleanly
remove a package which was installed with 'make install'.

Additionally, ensure a 'depmod -a' is run as part of the
install to update the module dependency information.
2010-07-28 16:47:26 -07:00
Brian Behlendorf 646047cfb8 Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-07-28 16:38:34 -07:00
Brian Behlendorf 26e61dd074 Generate common.sh with paths from configure
The common.sh script assumed that it was either being run from
in-tree or was installed under /usr/libexec/zfs.  If this was
not the case, because of say the default --prefix=/usr/local,
then the paths would be wrong.  To fix this common.sh is now
generated from common.sh.in with the correct path information
provided at configure time.
2010-07-28 16:30:45 -07:00
Brian Behlendorf 153adcb1e5 Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-07-28 09:41:11 -07:00
Brian Behlendorf 0f237a4379 Add Debian and Slackware style packaging via alien
The long term fix for Debian and Slackware style packaging is
to add native support for building these packages.  Unfortunately,
that is a large chunk of work I don't have time for right now.
That said it would be nice to have at least basic packages for
these distributions.

As a quick short/medium term solution I've settled on using alien
to convert the RPM packages to DEB or TGZ style packages.  The
build system has been updated with the following build targets
which will first build RPM packages and then convert them as
needed to the target package type:

  make rpm: Create .rpm packages
  make deb: Create .deb packages
  make tgz: Create .tgz packages
  make pkg: Create the right package type for your distribution

The solution comes with lot of caveats and your mileage may vary.
But basically the big limitations are that the resulting packages:

  1) Will not have the correct dependency information.
  2) Will not include the kernel version in the release.
  3) Will not handle all differences between distributions.

But the resulting packages should be easy to install and remove
from your system and take care of running 'depmod -a' and such.
As I said at the top this is not the right long term solution.
If any of the upstream distribution maintainers want to jump in
and help do this right for their distribution I'd love the help.
2010-07-28 09:37:04 -07:00
Brian Behlendorf 79bf615660 Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-07-23 11:42:41 -07:00
Brian Behlendorf 758275af4f Merge commit 'refs/top-bases/zfs-branch' into zfs-branch 2010-07-23 11:42:23 -07:00
Brian Behlendorf 2eee7b0ee5 Merge branch 'fix-branch' into refs/top-bases/zfs-branch 2010-07-23 11:42:22 -07:00
Brian Behlendorf 4471454be8 Merge branch 'fix-stack-ztest' into refs/top-bases/fix-branch 2010-07-23 11:42:21 -07:00
Brian Behlendorf d43294230a Merge commit 'refs/top-bases/fix-branch' into fix-branch 2010-07-23 11:42:21 -07:00
Brian Behlendorf 085c18fa55 Merge commit 'refs/top-bases/fix-stack-ztest' into fix-stack-ztest 2010-07-23 11:42:20 -07:00
Ned Bass be92edb218 Add extra guard space if needed
Some buggy NPTL threading implementations include the guard area within
the stack size allocations.  In this case we need to allocate an extra
page to account for the guard area since we only have two pages of usable
stack on Linux.  Added an autoconf test that detects such implementations
by running a test program designed to segfault if the bug is present.
Set a flag NPTL_GUARD_WITHIN_STACK that is tested to decide if extra
stack space must be allocated for the guard area.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2010-07-23 11:38:00 -07:00
Ned Bass 16a9f68137 Autoconf check for buggy stack guard region
Some buggy NPTL threading implementations include the guard area within
the stack size allocations.  In this case we need to allocate an extra
page to account for the guard area since we only have two pages of usable
stack on Linux.  Added an autoconf test that detects such implementations
by running a test program designed to segfault if the bug is present.
Set a flag NPTL_GUARD_WITHIN_STACK that is tested to decide if extra
stack space must be allocated for the guard area.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2010-07-23 11:35:20 -07:00
Brian Behlendorf f25f782e40 Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-07-23 10:44:12 -07:00
Brian Behlendorf 7fa6f8b93a Restrict usage of -fstack-check option
The stack check implementation in older versions of gcc has
a fairly low default limit on STACK_CHECK_MAX_FRAME_SIZE of
roughly 4096.  This results in numerous warning when it is
used with code which was designed to run in user space and
thus may be relatively stack heavy.  The avoid these warnings,
which are fatal with -Werror, this patch targets the use of
-fstack-check to libraries which are compiled in both user
space and kernel space.  The only utility which uses this
flag is ztest which is designed to simulate running in the
kernel and must meet the -fstack-check requirements.  All
other user space utilities do not use -fstack-check.

  warning: frame size too large for reliable stack checking
  warning: try reducing the number of local variables
2010-07-23 10:38:07 -07:00
Brian Behlendorf 0e533b7459 Best effort for minor device removal.
We should just make a best effort when removing zvol minors
from the system during destroy.  Failure here should never
prevent the pool from being destroyed.  For example, if a
pool is so heavily damaged it cannot be opened (part of the
minor removal) we still want to be able to destroy it.  The
worst case here is we may orphan a few minors but even that
is unlikely and not particularly harmful.
2010-07-21 14:20:56 -07:00
Brian Behlendorf 20479b4392 Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-07-21 10:08:41 -07:00
Brian Behlendorf acd6237623 Merge commit 'refs/top-bases/zfs-branch' into zfs-branch 2010-07-21 10:08:25 -07:00
Brian Behlendorf f39882ec1f Merge branch 'fix-branch' into refs/top-bases/zfs-branch 2010-07-21 10:08:24 -07:00
Brian Behlendorf e16508d660 Merge commit 'refs/top-bases/fix-branch' into fix-branch 2010-07-21 10:08:23 -07:00
Brian Behlendorf a2cf158872 Merge branch 'fix-stack-ztest' into refs/top-bases/fix-branch 2010-07-21 10:08:22 -07:00
Brian Behlendorf 8d6a2d0626 Merge commit 'refs/top-bases/fix-stack-ztest' into fix-stack-ztest 2010-07-21 10:08:22 -07:00
Ned Bass 75d868af70 Fixed typo that set thread STACK_SIZE to 24k instead of 8k
__linux__ was mispelled as _linux_ so #ifdef was always
selecting the Solaris STACK_SIZE value.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
2010-07-21 10:04:21 -07:00
Brian Behlendorf 6d72cb7326 Fix pthread stack size on 32-bit platforms
For some reason which remains mysterious to me the shared library
which calls pthread_create() must be linked with -pthread.  If this
is not done on 32-bit system the default ulimit stack size is used.
Surprisingly, on a 64-bit system the stack limit specified by the
pthread_attr is honored even when -pthread is not passed when linking
the shared library.
2010-07-21 09:59:39 -07:00
Brian Behlendorf 49c7595ad8 Replace SBUG with PANIC macro
The SBUG macro has been removed from the SPL and replaced
with PANIC which is closer to an existing API.  Simply
update the usage in vdev_disk.c.
2010-07-20 13:36:50 -07:00
Brian Behlendorf a5243a987b Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-07-17 16:04:31 -07:00
Ned Bass 84f737b448 Only try to unload modules whose use count is 0
This avoids errors from zfs.sh -u when, for example, zlib_deflate is in
use by btrfs.
2010-07-17 16:00:54 -07:00
Brian Behlendorf a13b72f7de Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-07-14 12:48:58 -07:00
Brian Behlendorf fc3e47c6d4 Corrently handle return code in blk_end_request_x
This was caught under Debian Lenny builds because they are one of
the few/only current distros based on a 2.6.26 kernel.  In one
of the build conditionals I accidently failed to assign the
return code to rc before returning.
2010-07-14 12:45:16 -07:00
Brian Behlendorf 548c9c6829 Use $target_cpu instead of `arch`
We should not be using arch for a few reasons.  First off it might
not be installed on their system, and secondly they may be trying
to cross-compile.
2010-07-14 12:44:42 -07:00
Brian Behlendorf d81440c8ab Check sourcelink is set before passing to readlink
When no source was found in any of the expected paths treat
this as fatal and provide the user with a hint as to what
they should do.
2010-07-14 12:44:37 -07:00
Brian Behlendorf 7cb1dcada5 Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-07-14 10:42:44 -07:00
Brian Behlendorf dccff58e11 Only make compiler warnings fatal with --enable-debug
While in theory I like the idea of compiler warnings always being
fatal.  In practice this causes problems when small harmless errors
cause build failures for end users.  To handle this I've updated
the build system such that -Werror is only used when --enable-debug
is passed to configure.  This is how I always build when developing
so I'll catch all build warnings and end users will not get stuck
by minor issues.
2010-07-14 10:41:48 -07:00
Brian Behlendorf d1f7e73bd0 Merge commit 'refs/top-bases/linux-kernel-disk' into linux-kernel-disk 2010-07-12 10:23:25 -07:00
Brian Behlendorf 99694a2e81 Merge commit 'refs/top-bases/zfs-branch' into zfs-branch 2010-07-12 10:23:05 -07:00