FreeBSD src
Go to file
Andriy Gapon de2cb430ad another rework of getzfsvfs / getzfsvfs_impl code
This change is designed to account for yet another difference between
illumos and FreeBSD VFS.  In FreeBSD a filesystem driver is supposed to
clean up mnt_data in its VFS_UNMOUNT method because it's the last call
into the driver before a struct mount object is destroyed.  The VFS
drains all references to the object before destroying it, but for the
driver it's already as good as gone.
In contrast, illumos VFS provides another method, VFS_FREEVFS, that is
called when all references are drained.  So, the driver can keep its
data after VFS_UNMOUNT and clean it up in VFS_FREEVFS after all
references are gone. This is what ZFS does on illumos.
So there a reference to a filesystem is sufficient to guarantee that the
ZFS specific data, aka zfsvfs_t, stays around (even if the filesystem
gets unmounted).  In FreeBSD we need to vfs_busy the filesystem to get
the same guarantee.  vfs_ref guarantees only that the struct mount is
kept.

The following rules should be observed in getzfsvfs / getzfsvfs_impl on
FreeBSD:
- if we need access to zfsvfs_t then we must use vfs_busy
- if only we need to access struct mount (aka vfs_t), then vfs_ref is
  enough
- when illumos code actually needs only the vfs_t, they still can pass
  the zfsvfs_t and get the vfs_t from it;  that can work in FreeBSD if
  the filesystem is busied, but when it's just referenced then we have
  to pass the vfs_t explicitly
- we cannot call vfs_busy while holding a dataset because that creates a
  LOR with dp_config_rwlock

As a result:
- getzfsvfs_impl now only references the filesystem, same as in illumos,
  but unlike illumos it has to return the vfs_t
- the consumers are updated to account for the change
- getzfsvfs busies the filesystem (and drops the reference from
  getzfsvfs_impl)

Also, zfs_unmount_snap() now gets a busied a filesystem, references it
and then unbusies it essentially reverting actions done in getzfsvfs.
This is needed because the code may perform some checks that require the
zfsvfs_t.  So, those are done before the unbusying.

MFC after:	2 weeks
2018-02-22 13:06:27 +00:00
bin Capsicumize uuidgen. 2018-02-17 12:32:53 +00:00
cddl MFV r329807: 2018-02-22 04:01:55 +00:00
contrib MFV r329552: less v530. 2018-02-19 05:10:22 +00:00
crypto Add declaration of SSL_get_selected_srtp_profile() for OpenSSL. 2018-01-25 23:38:05 +00:00
etc The firewall_type is ignored if not set in rc.conf or rc.conf.local, 2018-02-22 08:25:39 +00:00
gnu Remove libreadline from the source tree, all consumers but gdb 2018-02-06 12:22:42 +00:00
include Vendor import of llvm release_60 branch r325330: 2018-02-16 19:10:15 +00:00
kerberos5 various: general adoption of SPDX licensing ID tags. 2017-11-27 15:37:16 +00:00
lib 8940 Sending an intra-pool resumable send stream may result in EXDEV 2018-02-22 04:01:05 +00:00
libexec Build getty(8) with WARNS=6. 2018-02-21 15:57:24 +00:00
release Put the pine64 root filesystem on teh correct partition. 2018-02-16 16:22:54 +00:00
rescue Avoid referencing private lib names directly. 2017-11-10 07:53:02 +00:00
sbin Add bsdlabel and fdisk to powerpc64 2018-02-22 12:31:28 +00:00
secure Remove c_rehash(1) to not confuse users. We do not install the Perl script. 2018-02-08 19:55:03 +00:00
share style.lua(9): Drop notes about semicolons 2018-02-21 01:37:22 +00:00
stand lualoader: Clear up an empty conditional branch 2018-02-22 04:30:52 +00:00
sys another rework of getzfsvfs / getzfsvfs_impl code 2018-02-22 13:06:27 +00:00
targets Remove libreadline from the source tree, all consumers but gdb 2018-02-06 12:22:42 +00:00
tests gpart: append partition name to the underlying provider's physical path 2018-02-14 20:26:09 +00:00
tools Add script for linting stand/lua to tools/boot. 2018-02-22 04:28:52 +00:00
usr.bin ministat: disallow negative variance / nan Stddev 2018-02-21 15:54:23 +00:00
usr.sbin mountd: Return proper errno values in a few error paths 2018-02-21 00:19:02 +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 .git*: add gitattributes and gitignore 2017-12-25 21:07:54 +00:00
.gitignore .git*: add gitattributes and gitignore 2017-12-25 21:07:54 +00:00
COPYRIGHT Happy New Year 2018 my friends! 2017-12-31 16:48:04 +00:00
LOCKS Explicitly require Security Officer's approval for kernel PRNG bits. 2013-09-17 14:19:05 +00:00
MAINTAINERS list myself in the MAINTAINERS file for Xen bits 2018-02-13 16:25:43 +00:00
Makefile Add a note about why we have the conditional before including 2018-02-07 16:28:26 +00:00
Makefile.inc1 Properly lookup values if they were empty. 2018-02-20 22:03:08 +00:00
Makefile.libcompat X_COMPILER_* may not be defined. 2018-01-24 18:08:37 +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 Move devmatch to sbin from usr/sbin. 2018-02-12 14:44:21 +00:00
README Vendor import of less v530. 2018-02-19 04:47:31 +00:00
README.md Document the sys/boot -> stand move in hier.7 and the top-level README. 2017-12-03 20:36:36 +00:00
UPDATING Add Lua as a scripting langauge to /boot/loader 2018-02-12 15:31:53 +00:00

FreeBSD Source:

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 https://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 https://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.

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.

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