freebsd-dev/sys/conf
John Baldwin f3215338ef Refactor the AIO subsystem to permit file-type-specific handling and
improve cancellation robustness.

Introduce a new file operation, fo_aio_queue, which is responsible for
queueing and completing an asynchronous I/O request for a given file.
The AIO subystem now exports library of routines to manipulate AIO
requests as well as the ability to run a handler function in the
"default" pool of AIO daemons to service a request.

A default implementation for file types which do not include an
fo_aio_queue method queues requests to the "default" pool invoking the
fo_read or fo_write methods as before.

The AIO subsystem permits file types to install a private "cancel"
routine when a request is queued to permit safe dequeueing and cleanup
of cancelled requests.

Sockets now use their own pool of AIO daemons and service per-socket
requests in FIFO order.  Socket requests will not block indefinitely
permitting timely cancellation of all requests.

Due to the now-tight coupling of the AIO subsystem with file types,
the AIO subsystem is now a standard part of all kernels.  The VFS_AIO
kernel option and aio.ko module are gone.

Many file types may block indefinitely in their fo_read or fo_write
callbacks resulting in a hung AIO daemon.  This can result in hung
user processes (when processes attempt to cancel all outstanding
requests during exit) or a hung system.  To protect against this, AIO
requests are only permitted for known "safe" files by default.  AIO
requests for all file types can be enabled by setting the new
vfs.aio.enable_usafe sysctl to a non-zero value.  The AIO tests have
been updated to skip operations on unsafe file types if the sysctl is
zero.

Currently, AIO requests on sockets and raw disks are considered safe
and are enabled by default.  aio_mlock() is also enabled by default.

Reviewed by:	cem, jilles
Discussed with:	kib (earlier version)
Sponsored by:	Chelsio Communications
Differential Revision:	https://reviews.freebsd.org/D5289
2016-03-01 18:12:14 +00:00
..
config.mk Populate new KERN_OPTS from all the opt_*.h files in 2015-02-18 15:25:19 +00:00
dtb.mk Do as r289391 did for share/mk and make installing to a non-existent directory 2015-10-17 05:49:07 +00:00
files Refactor the AIO subsystem to permit file-type-specific handling and 2016-03-01 18:12:14 +00:00
files.amd64 hyperv/utils: Code rearrange and cleanup 2016-02-24 05:01:18 +00:00
files.arm Build ofw_cpu.c on all ARM configs using FDT. As we mve towards using the 2016-02-28 09:35:37 +00:00
files.arm64 Make pci_host_generic and thunderx_pci common 2016-02-24 06:05:30 +00:00
files.i386 hyperv/utils: Code rearrange and cleanup 2016-02-24 05:01:18 +00:00
files.mips Remove bus space fdt for MIPS. 2016-02-11 06:19:32 +00:00
files.pc98 Add libkern ffsll() for parity with flsll() 2015-10-22 20:28:37 +00:00
files.powerpc Implement OF_decode_addr() for arm. Move most of powerpc's implementation 2015-12-21 18:07:32 +00:00
files.riscv Add support for symmetric multiprocessing (SMP). 2016-02-24 16:50:34 +00:00
files.sparc64 Add libkern ffsll() for parity with flsll() 2015-10-22 20:28:37 +00:00
kern.mk Remove more references to targets we've never had. 2016-02-26 22:13:35 +00:00
kern.opts.mk Hook the meta/nofilemon build into using FAST_DEPEND. 2016-02-24 17:19:13 +00:00
kern.post.mk FAST_DEPEND: Prefer .OBJDIR depend files. 2016-02-29 21:10:47 +00:00
kern.pre.mk Fix MFS builds when both MD_ROOT_SIZE and MFS_IMAGE are specified 2016-02-02 07:02:51 +00:00
kmod_syms.awk
kmod.mk Import bsd.clang-analyze.mk based on NetBSD's version. 2016-02-26 22:14:00 +00:00
ldscript.amd64 amd64: set the correct LMA values 2015-06-26 07:12:17 +00:00
ldscript.arm Remove STARTUP_PAGETABLE_ADDR from the ARM configs and replace it with 2014-01-28 09:12:04 +00:00
ldscript.arm64 Bring in the start of the arm64 kernel. 2015-04-13 14:43:10 +00:00
ldscript.i386
ldscript.mips
ldscript.mips.cfe
ldscript.mips.mips64
ldscript.mips.octeon1
ldscript.powerpc Refactor PowerPC (especially AIM) init sequence to be less baroque. 2015-01-18 18:32:43 +00:00
ldscript.powerpc64 Fix build with new binutils. This gets a working kernel with GCC 5.2 and 2015-11-29 06:40:09 +00:00
ldscript.riscv Welcome the RISC-V 64-bit kernel. 2016-01-29 15:12:31 +00:00
ldscript.sparc64
Makefile.amd64 Clang's 3.5 integrated assembler now handles these files correctly (it 2015-01-05 12:28:22 +00:00
Makefile.arm ARM: All remaining functions in cpufunc_asm_arm10.S are identical with 2016-02-02 14:53:34 +00:00
Makefile.arm64 Build changes that allow the modules on arm64. 2015-10-08 17:42:08 +00:00
Makefile.i386 Clang's 3.5 integrated assembler now handles these files correctly (it 2015-01-05 12:28:22 +00:00
Makefile.mips Revert this change. It broke the trampoline build. Until I'm sure 2015-12-21 20:36:01 +00:00
Makefile.pc98 Fix kernel build ${MACHINE} path 2015-04-16 22:34:10 +00:00
Makefile.powerpc Make 32-bit PowerPC kernels, like 64-bit PowerPC kernels, position-independent 2015-03-07 20:14:46 +00:00
Makefile.riscv Welcome the RISC-V 64-bit kernel. 2016-01-29 15:12:31 +00:00
Makefile.sparc64 Bump the version of config to the latest (3 year old, so upgrade 2014-02-04 18:24:25 +00:00
makeLINT.mk
makeLINT.sed
newvers.sh newvers.sh: put variable assignments on separate lines 2015-12-31 19:25:35 +00:00
NOTES Refactor the AIO subsystem to permit file-type-specific handling and 2016-03-01 18:12:14 +00:00
options Refactor the AIO subsystem to permit file-type-specific handling and 2016-03-01 18:12:14 +00:00
options.amd64 Microsoft vmbus, storage and other related driver enhancements for HyperV. 2015-04-29 10:12:34 +00:00
options.arm Add SMP support to the ARM PLATFORM code. This will allow us to have 2016-02-28 13:43:58 +00:00
options.arm64 Add the SOC_HISI_HI6220 option. This will be used to enable drivers for 2015-08-26 18:09:17 +00:00
options.i386 Remove support for Xen PV domU kernels. Support for HVM domU kernels 2015-04-30 15:48:48 +00:00
options.mips Rename some CPU_MIPSxxx options and add new CPU_MIPSxxx options 2016-02-02 07:47:38 +00:00
options.pc98 Reduce diffs against i386. 2014-10-04 05:03:39 +00:00
options.powerpc Add support for new LAW registers in QorIQ SoCs. 2015-11-18 01:54:19 +00:00
options.riscv Welcome the RISC-V 64-bit kernel. 2016-01-29 15:12:31 +00:00
options.sparc64
systags.sh
WITHOUT_SOURCELESS
WITHOUT_SOURCELESS_HOST Retire the nve(4) driver; nfe(4) has been the default driver for NVIDIA 2014-02-16 12:22:43 +00:00
WITHOUT_SOURCELESS_UCODE Add nodevice iwmfw to WITHOUT_SOURCELESS_UCODE. 2015-08-08 20:45:47 +00:00