OpenZFS on Linux and FreeBSD
Go to file
Brian Behlendorf 8926ab7a50 Move cv_destroy() outside zp->z_range_lock()
With the recent SPL change (d599e4fa) that forces cv_destroy()
to block until all waiters have been woken.  It is now unsafe
to call cv_destroy() under the zp->z_range_lock() because it
is used as the condition variable mutex.  If there are waiters
cv_destroy() will block until they wake up and aquire the mutex.
However, they will never aquire the mutex because cv_destroy()
will not return allowing it's caller to drop the lock.  Deadlock.

To avoid this cv_destroy() is now run asynchronously in a taskq.
This solves two problems:

1) It is no longer run under the zp->z_range_lock so no deadlock.
2) Since cv_destroy() may now block we don't want this slowing
   down zfs_range_unlock() and throttling the system.

This was not as much of an issue under OpenSolaris because their
cv_destroy() implementation does not do anything.  They do however
risk a bad paging request if cv_destroy() returns, the memory holding
the condition variable is free'd, and then the waiters wake up and
try to reference it.  It's a very small unlikely race, but it is
possible.
2011-02-10 09:27:21 -08:00
cmd Remove HAVE_ZPL from commands and libraries 2011-02-04 16:14:34 -08:00
config Minimal libshare infrastructure 2011-02-04 16:14:29 -08:00
etc Minimal libshare infrastructure 2011-02-04 16:14:29 -08:00
include Add mmap(2) support 2011-02-10 09:27:21 -08:00
lib Add Hooks for Linux File Operations 2011-02-10 09:27:21 -08:00
man Documentation updates 2011-02-04 16:14:34 -08:00
module Move cv_destroy() outside zp->z_range_lock() 2011-02-10 09:27:21 -08:00
patches Add build system 2010-08-31 13:41:27 -07:00
scripts Minimal libshare infrastructure 2011-02-04 16:14:29 -08:00
.gitignore Ignore unsigned module build products 2010-03-09 14:14:09 -08:00
AUTHORS Add AUTHORS to master branch 2010-05-18 14:55:01 -07:00
COPYING Relocate COPYING+COPYRIGHT, remove README cruft 2008-12-01 15:34:53 -08:00
COPYRIGHT Update COPYRIGHT to reference zpios CDDL exceptions. 2010-05-18 14:25:28 -07:00
ChangeLog Add build system 2010-08-31 13:41:27 -07:00
DISCLAIMER Update COPYRIGHT and DISCLAIMER. 2010-05-18 10:32:23 -07:00
META Prep for 0.5.2 tag 2010-11-08 14:03:36 -08:00
Makefile.am Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
Makefile.in Minimal libshare infrastructure 2011-02-04 16:14:29 -08:00
OPENSOLARIS.LICENSE Add CDDL license file 2008-12-01 14:49:34 -08:00
README.markdown Fix markdown rendering 2010-09-15 09:09:37 -07:00
ZFS.RELEASE Update to onnv_147 2010-08-26 14:24:34 -07:00
autogen.sh Minor packaging fixes 2010-09-01 15:42:32 -07:00
configure Add Linux Compat Infrastructure 2011-02-10 09:25:10 -08:00
configure.ac Add Linux Compat Infrastructure 2011-02-10 09:25:10 -08:00
zfs-modules.spec.in Use top level object directory in zfs-module.spec 2010-09-10 12:33:31 -07:00
zfs-script-config.sh.in Unconditionally load core kernel modules 2010-11-11 11:38:25 -08:00
zfs.spec.in Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
zfs_config.h.in Minimal libshare infrastructure 2011-02-04 16:14:29 -08:00

README.markdown

Native ZFS for Linux! ZFS is an advanced file system and volume manager which was originally developed for Solaris. It has been successfully ported to FreeBSD and now there is a functional Linux ZFS kernel port too. The port currently includes a fully functional and stable SPA, DMU, and ZVOL with a ZFS Posix Layer (ZPL) on the way!

$ ./configure
$ make pkg

Full documentation for building, configuring, and using ZFS can be found at: http://zfsonlinux.org