OpenZFS on Linux and FreeBSD
Go to file
Brian Behlendorf ec2626ad3f Use SA_HDL_PRIVATE for SA xattrs
A private SA handle must be used to ensure we can drop the dbuf
hold on the spill block prior to calling dmu_tx_commit().  If we
call dmu_tx_commit() before sa_handle_destroy(), then our hold
will trigger a copy of the dbuf to be made.  This is done to
prevent data from leaking in to the syncing txg.  As a result
the original dirty spill block will remain cached.

Additionally, relying on the shared zp->z_sa_hdl is unsafe in
the xattr context because the znode may be asynchronously dropped
from the cache.  It's far safer and simpler just to use a private
handle for xattrs.  Plus any additional overhead is offset by
the avoidance of the previously mentioned memory copy.

These forever dirty buffers can be noticed in the arcstats under
the anon_size.  On a quiescent system the value should be zero.
Without this fix and a SA xattr write workload you will see
anon_size increase.  Eventually, if enough dirty data builds up
your system it will appear to hang.  This occurs because the dmu
won't allow new txs to be assigned until that dirty data is
flushed, and it won't be because it's not part of an assigned tx.

As an aside, I typically see anon_size lurk around 16k so I think
there is another place in the code which needs a similar fix.
However, this value doesn't grow over time so it isn't critical.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #503
Issue #513
2012-03-02 13:20:48 -08:00
cmd Cleanly support debug packages 2012-02-27 14:08:17 -08:00
config Cleanly support debug packages 2012-02-27 14:08:17 -08:00
dracut Cleanly support debug packages 2012-02-27 14:08:17 -08:00
etc Cleanly support debug packages 2012-02-27 14:08:17 -08:00
include Cleanly support debug packages 2012-02-27 14:08:17 -08:00
lib Cleanly support debug packages 2012-02-27 14:08:17 -08:00
man Cleanly support debug packages 2012-02-27 14:08:17 -08:00
module Use SA_HDL_PRIVATE for SA xattrs 2012-03-02 13:20:48 -08:00
patches Add build system 2010-08-31 13:41:27 -07:00
scripts Cleanly support debug packages 2012-02-27 14:08:17 -08:00
udev Cleanly support debug packages 2012-02-27 14:08:17 -08:00
.gitignore Ignore unsigned module build products 2010-03-09 14:14:09 -08:00
AUTHORS Add "ashift" property to zpool create 2011-06-17 16:35:49 -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 zfs-0.6.0-rc6 tag 2011-10-06 14:10:45 -07:00
Makefile.am Add the release component to headers 2012-01-18 12:19:47 -08:00
Makefile.in Cleanly support debug packages 2012-02-27 14:08:17 -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 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 Make autogen.sh executable 2011-07-26 10:15:35 -07:00
configure Cleanly support debug packages 2012-02-27 14:08:17 -08:00
configure.ac Add make rule for building Arch Linux packages 2011-12-14 19:14:23 -08:00
zfs-modules.spec.in Cleanly support debug packages 2012-02-27 14:08:17 -08:00
zfs-script-config.sh.in Unconditionally load core kernel modules 2010-11-11 11:38:25 -08:00
zfs.spec.in Fix rpm dependencies 2012-01-18 12:19:52 -08:00
zfs_config.h.in Cleanly support debug packages 2012-02-27 14:08:17 -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