zfs/tests/zfs-tests/cmd
Brian Behlendorf c7db374ac6 Fix buffered/direct/mmap I/O race
When a page is faulted in for memory mapped I/O the page lock
may be dropped before it has been read and marked up to date.
If a buffered read encounters such a page in mappedread() it
must wait until the page has been updated. Failure to do so
will result in a panic on debug builds and incorrect data on
production builds.

The critical part of this change is in mappedread() where pages
which are not up to date are now handled. Additionally, it
includes the following simplifications.

- zfs_getpage() and zfs_fillpage() could be passed an array of
  pages. This could be more efficient if it was used but in
  practice only a single page was ever provided. These
  interfaces were simplified to acknowledge that.

- update_pages() was modified to correctly set the PG_error bit
  on a page when it cannot be read by dmu_read().

- Setting PG_error and PG_uptodate was moved to zfs_fillpage()
  from zpl_readpage_common(). This is consistent with the
  handling in update_pages() and mappedread().

- Minor additional refactoring to comments and variable
  declarations to improve readability.

- Add a test case to exercise concurrent buffered, direct,
  and mmap IO to the same file.

- Reduce the mmap_sync test case default run time.

Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Reviewed-by: Brian Atkinson <batkinson@lanl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #13608
Closes #14498
2023-04-21 13:12:35 -07:00
..
badsend Drop references when skipping dmu_send due to EXDEV 2020-09-30 13:19:49 -07:00
btree_test Use the correct return type for getopt 2020-12-17 10:19:30 -08:00
chg_usr_exec Add the ZFS Test Suite 2016-03-16 13:46:16 -07:00
devname2devid ZTS: Fix devname2devid build on FreeBSD with libudev 2020-07-22 10:49:22 -07:00
dir_rd_update Use cstyle -cpP in `make cstyle` check 2016-12-12 10:46:26 -08:00
draid tests: cmd: draid: remove unused and undocumented -v 2022-12-01 12:39:44 -08:00
file_check tests/file_check: remove unused variable 2021-12-06 13:52:34 -08:00
file_trunc Enable remaining tests 2017-05-22 12:34:32 -04:00
file_write Corrected oversight in ZERO_RANGE behavior 2022-04-21 16:58:07 -07:00
get_diff Add missing .gitignore from "Implement Redacted Send/Receive" 2019-06-23 11:51:29 -07:00
largest_file OpenZFS restructuring - libspl 2019-10-02 10:39:48 -07:00
libzfs_input_check implicit conversion from 'boolean_t' to 'ds_hold_flags_t' 2020-12-27 16:31:02 -08:00
mkbusy Fix typos 2020-06-09 21:24:09 -07:00
mkfile tests: mkfile: usage: () -> (void) 2022-12-09 12:07:38 -08:00
mkfiles Update ZTS to work on FreeBSD 2019-12-18 12:29:43 -08:00
mktree Update ZTS to work on FreeBSD 2019-12-18 12:29:43 -08:00
mmap_exec Enable remaining tests 2017-05-22 12:34:32 -04:00
mmap_libaio Clean up lib dependencies 2020-07-10 14:26:00 -07:00
mmap_seek zfs-test/mmap_seek: fix build on musl 2022-02-16 17:58:55 -08:00
mmapwrite ZTS: close in mmapwrite.c 2023-01-09 17:15:22 -08:00
nvlist_to_lua Use abs_top_builddir when referencing libraries 2020-07-10 14:26:32 -07:00
randfree_file Fix coverity defects: CID 147692, 147693, 147694 2016-10-13 14:38:59 -07:00
randwritecomp OpenZFS 9166 - zfs storage pool checkpoint 2018-06-26 10:07:42 -07:00
readmmap Add the ZFS Test Suite 2016-03-16 13:46:16 -07:00
rename_dir Add the ZFS Test Suite 2016-03-16 13:46:16 -07:00
rm_lnkcnt_zero_file Prefer `for (;;)` to `while (TRUE)` 2019-08-28 10:38:40 -07:00
send_doall send_iterate_snap : doall send without fromsnap 2021-02-24 09:48:58 -08:00
stride_dd Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
threadsappend Add the ZFS Test Suite 2016-03-16 13:46:16 -07:00
user_ns_exec Take user namespaces into account in policy checks 2018-03-07 15:40:42 -08:00
xattrtest Support uClibc for the tests compilations 2021-02-16 21:51:46 -08:00
Makefile.am Fix lseek(SEEK_DATA/SEEK_HOLE) mmap consistency 2021-11-05 08:08:55 -07:00
file_common.h Enable remaining tests 2017-05-22 12:34:32 -04:00
mmap_sync.c Fix buffered/direct/mmap I/O race 2023-04-21 13:12:35 -07:00