OPNsense - FreeBSD source
Find a file
Andriy Gapon bc97daa07e MFV r284412: 5911 ZFS "hangs" while deleting file
Reviewed by: Bayard Bell <buffer.g.overflow@gmail.com>
Reviewed by: Alek Pinchuk <alek@nexenta.com>
Reviewed by: Simon Klinkert <simon.klinkert@gmail.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
Author: Matthew Ahrens <mahrens@delphix.com>

illumos/illumos-gate@46e1baa6cf

https://www.illumos.org/issues/5911
Sometimes ZFS appears to hang while deleting a file. It is actually
making slow progress at the file deletion, but other operations
(administrative and writes via the data path) "hang" until the file
removal completes, which can take a long time if the file has many
blocks. The deletion (or most of it) happens in a single txg, and the
sync thread spends most of its time reading indirect blocks via this
stack trace:
	swtch+0x141()
	cv_wait+0x70()
	zio_wait+0x5b()
	dbuf_read+0x2c0()
	free_children+0x50()
	free_children+0x12a()
	free_children+0x12a()
	free_children+0x12a()
	dnode_sync_free_range_impl+0xdf()
	dnode_sync_free_range+0x52()
	range_tree_vacate+0x65()
	dnode_sync+0x1d8()
	dmu_objset_sync_dnodes+0x77()
	dmu_objset_sync+0x19f()
	dsl_dataset_sync+0x51()
	dsl_pool_sync+0x9a()
	spa_sync+0x2ff()
	txg_sync_thread+0x21f()
	thread_start+8()
One way to reproduce the problem is if we are over the arc_meta_limit,
e.g. because lots of indirect blocks are pinned because we have L0
dbufs under them.  It could be that most of the L1 indirects are cached,
in which case when dmu_free_long_range_impl() calls dmu_tx_hold_free(),
it will complete very quickly. This allows dmu_free_long_range_impl() to
put many (perhaps all of its) transactions in the same TXG. However,
dmu_free_long_range_impl() calls dnode_evict_dbufs (and
dnode_free_range()), which removes the L0 dbufs, thus reducing the hold
count on the L1 indirect blocks above it, allowing them to be evicted.
Because we are over the arc_meta_limit(), these L1 blocks will be
evicted ASAP. Thus when we get to syncing context, the L1 indirects are
no longer cached and must be read in.

Obtained from:	illumos
MFC after:	15 days
2015-06-19 06:58:05 +00:00
bin Continue ubreaking ``env LANG=ru_RU.KOI8-R ls -l''. 2015-06-17 04:26:48 +00:00
cddl Revert r284417 it is not necessary anymore 2015-06-15 19:28:07 +00:00
contrib Update libcxxrt upgrade instructions 2015-06-18 14:29:46 +00:00
crypto Merge OpenSSL 1.0.1o. 2015-06-12 16:48:26 +00:00
etc Add META_MODE support. 2015-06-13 19:20:56 +00:00
games Add META_MODE support. 2015-06-13 19:20:56 +00:00
gnu new depends 2015-06-16 23:37:19 +00:00
include new depends 2015-06-16 23:37:19 +00:00
kerberos5 Fix a typo introduced in r262209. 2015-06-18 21:18:43 +00:00
lib Restructure memory allocation in bhyve to support "devmem". 2015-06-18 06:00:17 +00:00
libexec new depends 2015-06-16 23:37:19 +00:00
release Add Makefile.azure, used to upload VHD images to the 2015-06-18 19:20:00 +00:00
rescue Add META_MODE support. 2015-06-13 19:20:56 +00:00
sbin Document that a forced dismount of an NFSv3 mount when the 2015-06-17 23:24:46 +00:00
secure Add compatibility with $2y$ bcrypt hashes 2015-06-16 23:57:29 +00:00
share Document title should be in CAPS. 2015-06-18 16:31:32 +00:00
sys MFV r284412: 5911 ZFS "hangs" while deleting file 2015-06-19 06:58:05 +00:00
targets Support WITH_LLDB 2015-06-16 23:38:44 +00:00
tests Misc fixes from projects/bmake 2015-06-11 21:13:05 +00:00
tools The build and installation of rmail(8) is only related to the SENDMAIL option 2015-06-18 05:58:15 +00:00
usr.bin Fix a bug reported by coverity. Since AF_UNIX sockets don't 2015-06-18 13:45:07 +00:00
usr.sbin Add the ability to detect ZFS and GELI encrypted file systems to fstyp(8) 2015-06-19 05:09:02 +00:00
.arcconfig Phabricator: enable "history.immutable": 2015-04-30 00:27:53 +00:00
.arclint phabricator related changes: 2015-04-20 20:33:22 +00:00
COPYRIGHT Bump copyright year. 2014-12-31 10:00:43 +00:00
LOCKS Explicitly require Security Officer's approval for kernel PRNG bits. 2013-09-17 14:19:05 +00:00
MAINTAINERS Remove cokane@ from MAINTAINERS for 3dfx(4)/tdfx(4) because their email 2014-11-25 05:25:12 +00:00
Makefile Move the universe done dependency on the worlds completing out of the 2015-06-16 21:29:46 +00:00
Makefile.inc1 Revert r284417 it is not necessary anymore 2015-06-15 19:28:07 +00:00
ObsoleteFiles.inc Create a separate kobj interface for leaf-driver PCI IOV methods. 2015-05-28 22:01:50 +00:00
README Import OpenSSL 1.0.1o. 2015-06-12 16:33:55 +00:00
UPDATING Make mention of make.conf being included earlier and what to do about it. 2015-06-16 23:32:28 +00:00

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree.  See build(7)
and http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html
for more information, including setting make(1) variables.

The `buildkernel` and `installkernel` targets build and install
the kernel and the modules (see below).  Please see the top of
the Makefile in this directory for more information on the
standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process.  See build(7), config(8),
and http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html
for more information.

Note: If you want to build and install the kernel with the
`buildkernel` and `installkernel` targets, you might need to build
world before.  More information is available in the handbook.

The kernel configuration files reside in the sys/<arch>/conf
sub-directory.  GENERIC is the default configuration used in release builds.
NOTES contains entries and documentation for all possible
devices, not just those commonly used.


Source Roadmap:
---------------

bin		System/user commands.

cddl		Various commands and libraries under the Common Development
		and Distribution License.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

rescue		Build system for statically linked /rescue utilities.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

sys		Kernel sources.

tests		Regression tests which can be run by Kyua.  See tests/README
		for additional information.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/synching.html