OpenZFS on Linux and FreeBSD
Go to file
Martin Matuska cddafdcbc5 Illumos #1313: Integer overflow in txg_delay()
The function txg_delay() is used to delay txg (transaction group)
threads in ZFS.  The timeout value for this function is calculated
using:

    int timeout = ddi_get_lbolt() + ticks;

Later, the actual wait is performed:

    while (ddi_get_lbolt() < timeout &&
        tx->tx_syncing_txg < txg-1 && !txg_stalled(dp))
            (void) cv_timedwait(&tx->tx_quiesce_more_cv, &tx->tx_sync_lock,
                timeout - ddi_get_lbolt());

The ddi_get_lbolt() function returns current uptime in clock ticks
and is typed as clock_t.  The clock_t type on 64-bit architectures
is int64_t.

The "timeout" variable will overflow depending on the tick frequency
(e.g. for 1000 it will overflow in 28.855 days). This will make the
expression "ddi_get_lbolt() < timeout" always false - txg threads will
not be delayed anymore at all. This leads to a slowdown in ZFS writes.

The attached patch initializes timeout as clock_t to match the return
value of ddi_get_lbolt().

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #352
2011-08-01 12:09:43 -07:00
cmd Illumos #278: get rid zfs of python and pyzfs dependencies 2011-08-01 12:09:36 -07:00
config Fix the configure CONFIG_* option detection 2011-07-22 15:07:16 -07:00
dracut Wrap dracut scripts to 79 chars 2011-07-31 11:28:44 -07:00
etc Add .gitignore for zfs.<distro> init scripts 2011-08-01 10:27:54 -07:00
include Illumos #278: get rid zfs of python and pyzfs dependencies 2011-08-01 12:09:36 -07:00
lib Illumos #278: get rid zfs of python and pyzfs dependencies 2011-08-01 12:09:36 -07:00
man Illumos #1092: zfs refratio property 2011-08-01 12:09:11 -07:00
module Illumos #1313: Integer overflow in txg_delay() 2011-08-01 12:09:43 -07:00
patches Add build system 2010-08-31 13:41:27 -07:00
scripts Provide a rc.d script for archlinux 2011-07-11 14:12:23 -07: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-rc5 tag 2011-07-01 15:24:34 -07:00
Makefile.am Add dracut support 2011-03-17 16:52:04 -07:00
Makefile.in Provide a rc.d script for archlinux 2011-07-11 14:12:23 -07: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 Make autogen.sh executable 2011-07-26 10:15:35 -07:00
configure Turn the init.d scripts into autoconf config files 2011-08-01 09:54:44 -07:00
configure.ac Turn the init.d scripts into autoconf config files 2011-08-01 09:54:44 -07:00
zfs-modules.spec.in Fix rebuildable RPMs for el6/ch5 2011-04-08 10:22:42 -07:00
zfs-script-config.sh.in Unconditionally load core kernel modules 2010-11-11 11:38:25 -08:00
zfs.spec.in Remove zfs service only on uninstall, not on upgrade 2011-07-08 11:44:17 -07:00
zfs_config.h.in Linux compat 2.6.39: mount_nodev() 2011-07-01 13:36:39 -07: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