OpenZFS on Linux and FreeBSD
Go to file
Brian Behlendorf 65d56083b4 Fix zpool on zvol lock inversion deadlock
In all but one case the spa_namespace_lock is taken before the
bdev->bd_mutex lock.  But Linux __blkdev_get() function calls
fops->open() with the bdev->bd_mutex lock held and we must
somehow still safely acquire the spa_namespace_lock.

To avoid a potential lock inversion deadlock we preemptively
try to take the spa_namespace_lock().  Normally it will not
be contended and this is safe because spa_open_common() handles
the case where the caller already holds the spa_namespace_lock.

When it is contended we risk a lock inversion if we were to
block waiting for the lock.  Luckily, the __blkdev_get()
function allows us to return -ERESTARTSYS which will result in
bdev->bd_mutex being dropped, reacquired, and fops->open() being
called again.  This process can be repeated safely until both
locks are acquired.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Jorgen Lundman <lundman@lundman.net>
Closes #612
2012-12-20 09:57:39 -08:00
cmd vdev_id support for device link aliases 2012-12-03 14:04:47 -08:00
config Update SAs when an inode is dirtied 2012-12-14 12:18:54 -08:00
dracut Remove autotools products 2012-08-27 11:47:44 -07:00
etc vdev_id support for device link aliases 2012-12-03 14:04:47 -08:00
include Revert "Remove TSD zfs_fsyncer_key" 2012-12-20 09:56:28 -08:00
lib Fix get/set users/groups in quota props via numeric id 2012-12-17 09:52:58 -08:00
man vdev_id support for device link aliases 2012-12-03 14:04:47 -08:00
module Fix zpool on zvol lock inversion deadlock 2012-12-20 09:57:39 -08:00
patches Adding grub2 mkconfig support patch 2012-07-30 16:17:23 -07:00
scripts Implemented sharing datasets via SMB using libshare 2012-12-03 09:42:15 -08:00
udev Update 69-vdev.rules .gitignore 2012-12-14 12:16:42 -08:00
.gitignore Remove autotools products 2012-09-11 10:15:13 -07:00
AUTHORS Refresh AUTHORS 2012-12-19 09:47:25 -08: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
DISCLAIMER Update COPYRIGHT and DISCLAIMER. 2010-05-18 10:32:23 -07:00
META zfs-0.6.0-rc12 2012-11-13 14:35:44 -08:00
Makefile.am Do not use KERNEL_DIR env var in Makefile.am 2012-12-17 09:45:47 -08:00
OPENSOLARIS.LICENSE Add CDDL license file 2008-12-01 14:49:34 -08:00
PKGBUILD-zfs-modules.in Add make rule for building Arch Linux packages 2011-12-14 19:14:23 -08:00
PKGBUILD-zfs.in Add make rule for building Arch Linux packages 2011-12-14 19:14:23 -08:00
README.markdown Add script for builtin module building. 2012-07-26 13:45:09 -07:00
ZFS.RELEASE Update to onnv_147 2010-08-26 14:24:34 -07:00
autogen.sh Remove autotools products 2012-08-27 11:47:44 -07:00
configure.ac Add zstreamdump(8) command to examine ZFS send streams. 2012-09-02 14:54:27 -07:00
copy-builtin Consistent menuconfig name 2012-08-26 13:49:37 -07:00
dkms.conf.in Support building a zfs-modules-dkms sub package 2012-08-08 15:21:01 -07:00
dkms.postinst Support building a zfs-modules-dkms sub package 2012-08-08 15:21:01 -07:00
zfs-modules.spec.in Cleanly remove zfs-modules-devel headers 2012-08-13 16:35:26 -07:00
zfs-script-config.sh.in Unconditionally load core kernel modules 2010-11-11 11:38:25 -08:00
zfs.release.in Move zfs.release generation to configure step 2012-07-12 12:22:51 -07:00
zfs.spec.in Remove the ChangeLog 2012-12-19 09:27:50 -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

To copy the kernel code inside your kernel source tree for builtin compilation:

$ ./configure --enable-linux-builtin --with-linux=/usr/src/linux-...
$ ./copy-builtin /usr/src/linux-...

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