zfs/module
Mark Johnston cd32b4f5b7 Fix a deadlock in the FreeBSD getpages VOP
FreeBSD has a per-page "busy" lock which is held when handling a page
fault on a mapped file.  This lock is also acquired when copying data
from the DMU to the page cache in zfs_write().  File range locks are
also acquired in both of these paths, in the opposite order with respect
to the busy lock.

In the getpages VOP, the range lock is only used to determine the extent
of optional read-ahead and read-behind operations.  To resolve the lock
order reversal, modify the getpages VOP to avoid blocking on the range
lock.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@ixsystems.com>
Signed-off-by: Mark Johnston <markj@FreeBSD.org>
Closes #10519
2020-07-06 11:53:57 -07:00
..
avl Cleanup linux module kbuild files 2020-06-10 09:24:15 -07:00
icp Make Skein_{Get,Put}64_LSB_First inline functions 2020-06-18 12:21:38 -07:00
lua Switch off -Wmissing-prototypes for libgcc math functions 2020-06-18 12:21:46 -07:00
nvpair Cleanup linux module kbuild files 2020-06-10 09:24:15 -07:00
os Fix a deadlock in the FreeBSD getpages VOP 2020-07-06 11:53:57 -07:00
spl Cleanup linux module kbuild files 2020-06-10 09:24:15 -07:00
unicode Cleanup linux module kbuild files 2020-06-10 09:24:15 -07:00
zcommon Add device rebuild feature 2020-07-03 11:05:50 -07:00
zfs Add a "try" operation for range locks 2020-07-06 11:53:31 -07:00
.gitignore Cleanup linux module kbuild files 2020-06-10 09:24:15 -07:00
Kbuild.in Move zfs_gitrev.h to build directory 2020-06-24 18:19:28 -07:00
Makefile.bsd Add device rebuild feature 2020-07-03 11:05:50 -07:00
Makefile.in Include FreeBSD sources in module dist 2020-06-26 14:19:35 -07:00