freebsd with flexible iflib nic queues
Go to file
Kirk McKusick 3193b25a5a This is an additional fix for bug report 230962. When using
extended attributes, the kernel can panic with either "ffs_truncate3"
or with "softdep_deallocate_dependencies: dangling deps".

The problem arises because the flushbuflist() function which is
called to clear out buffers is passed either the V_NORMAL flag to
indicate that it should flush buffer associated with the contents
of the file or the V_ALT flag to indicate that it should flush the
buffers associated with the extended attribute data. The buffers
containing the extended attribute data are identified by having
their BX_ALTDATA flag set in the buffer's b_xflags field. The
BX_ALTDATA flag is set on the buffer when the extended attribute
block is first allocated or when its contents are read in from the
disk.

On a busy system, a buffer may be reused for another purpose, but
the contents of the block that it contained continues to be held
in the main page cache. Each physical page is identified as holding
the contents of a logical block within a specified file (identified
by a vnode). When a request is made to read a file, the kernel first
looks for the block in the existing buffers.  If it is not found
there, it checks the page cache to see if it is still there. If
it is found in the page cache, then it is remapped into a new
buffer thus avoiding the need to read it in from the disk.

The bug is that when a buffer request made for an extended attribute
is fulfilled by reconstituting a buffer from the page cache rather
than reading it in from disk, the BX_ALTDATA flag was not being
set. Thus the flushbuflist() function would never clear it out and
the "ffs_truncate3" panic would occur because the vnode being cleared
still had buffers on its clean-buffer list. If the extended attribute
was being updated, it is first read, then updated, and finally
written. If the read is fulfilled by reconstituting the buffer
from the page cache the BX_ALTDATA flag was not set and thus the
dirty buffer would never be flushed by flushbuflist(). Eventually
the buffer would be recycled. Since it was never written it would
have an unfinished dependency which would trigger the
"softdep_deallocate_dependencies: dangling deps" panic.

The fix is to ensure that the BX_ALTDATA flag is set when a buffer
has been reconstituted from the page cache.

PR:           230962
Reported by:  2t8mr7kx9f@protonmail.com
Reviewed by:  kib
Tested by:    Peter Holm
MFC after:    1 week
Sponsored by: Netflix
2019-03-12 19:08:41 +00:00
bin Remove now useless -d and -t flags. 2019-03-12 04:49:59 +00:00
cddl Fix a regression introduced in r344569 2019-02-27 13:49:41 +00:00
contrib Revert r308867 (which was originally committed in the clang390-import 2019-03-12 18:19:44 +00:00
crypto Merge OpenSSL 1.1.1b. 2019-02-26 19:31:33 +00:00
etc Merge ^/head r344549 through r344775. 2019-03-04 19:14:32 +00:00
gnu Divorce MK_GDB from MK_BINUTILS. 2019-03-06 20:13:02 +00:00
include Import OpenSSL 1.1.1b. 2019-02-26 18:06:51 +00:00
kerberos5 Add WITH_PIE knob to build Position Independent Executables 2019-02-15 22:22:38 +00:00
lib Move libunwind out of contrib/llvm/projects. 2019-03-12 16:41:17 +00:00
libexec Drop "All rights reserved" from the files I own 2019-03-11 22:23:56 +00:00
release Fix sed script to insert Amazon NTP server into ntp.conf once rather 2019-02-19 23:24:39 +00:00
rescue rescue: set NO_SHARED in Makefile 2018-11-19 22:18:18 +00:00
sbin camcontrol.8: Bump date after r345051 2019-03-12 09:43:11 +00:00
secure Merge OpenSSL 1.1.1b. 2019-02-26 19:31:33 +00:00
share ports.7: Add an example of how to use flavors 2019-03-12 09:27:37 +00:00
stand stand: Improve some debugging experience 2019-03-12 16:21:39 +00:00
sys This is an additional fix for bug report 230962. When using 2019-03-12 19:08:41 +00:00
targets retire LINKER_FEATURES filter flag 2018-11-12 20:44:22 +00:00
tests Drop "All rights reserved" from the files I own 2019-03-11 22:23:56 +00:00
tools Drop "All rights reserved" from my copyright statements. 2019-03-06 22:11:45 +00:00
usr.bin Drop "All rights reserved" from the files I own 2019-03-11 22:23:56 +00:00
usr.sbin freebsd-update: restore old exit code when no updates are available locally 2019-03-12 08:31:43 +00:00
.arcconfig callsign isn't required anymore 2016-09-29 06:19:45 +00:00
.arclint arc lint: ignore /tests/ in chmod 2017-12-19 03:38:06 +00:00
.gitattributes MK_ZFS -> {MK_ZFS|MK_LOADER_ZFS}, this is so we can diable userland / kernel 2019-01-05 22:45:20 +00:00
.gitignore Ignore _.universe-toolchain file. 2018-07-01 13:50:37 +00:00
COPYRIGHT Happy New Year 2019! 2019-01-01 00:25:25 +00:00
LOCKS LOCKS: update current locks 2018-06-09 03:08:04 +00:00
MAINTAINERS Update review requests for bhyve. 2019-02-27 20:09:58 +00:00
Makefile Update comment about 'universe' disk usage 2018-11-10 19:09:48 +00:00
Makefile.inc1 `make buildworld' should display the build time in seconds 2019-03-12 07:40:38 +00:00
Makefile.libcompat Use ...-freebsd13.0 in -target strings. 2018-11-12 16:55:20 +00:00
Makefile.sys.inc AUTO_OBJ: For all top-level targets enforce using an OBJDIR. 2017-12-05 21:29:47 +00:00
ObsoleteFiles.inc Set tentative merge date, and bump __FreeBSD_version. 2019-03-04 19:23:11 +00:00
README Import OpenSSL 1.1.1b. 2019-02-26 18:06:51 +00:00
README.md README: add generic notes about GENERIC and NOTES 2018-06-17 19:44:24 +00:00
UPDATING Tweak wording a little. 2019-03-12 06:01:43 +00:00

FreeBSD Source:

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

FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.

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), config(8), https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html, and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html for more information, including setting make(1) variables.

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.

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.

stand		Boot loader sources.

sys		Kernel sources.

sys/<arch>/conf Kernel configuration files. GENERIC is the configuration
		used in release builds. NOTES contains documentation of
		all possible entries.

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:

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/current-stable.html