diff options
| author | Maxim Sobolev <sobomax@FreeBSD.org> | 2026-10-04 19:24:16 +0000 |
|---|---|---|
| committer | Maxim Sobolev <sobomax@FreeBSD.org> | 2026-10-04 19:26:41 +0000 |
| commit | a127039dd0c24bc18b3513322d22fd8fee6724eb (patch) | |
| tree | 392f34680e0edd90516f404303fc23142957dba4 /stand/efi/liblua32efi/Makefile | |
| parent | 479c98287ee63496bd44d8d64d63c9ec16323e33 (diff) | |
flush_pagedep_deps() drops the soft updates lock to obtain the vnode of
a new directory. If its MKDIR_BODY dependency completes in that window,
the lookup of the directory's first block in flush_newblk_dep() can find
a stale allocindir left behind by a previous owner of the same block,
relocated by ffs_reallocblks() and freed, and panic.
The test grows interleaved files past UFS_NDADDR to keep clusters being
relocated, while other workers create subdirectories in a parent with
IN_ENDOFF set, so that ffs_vput_pair() syncs it, and fsync() them to
complete the mkdir dependencies. The file system layout and the way
the writers put their blocks on disk are arranged so that a new
directory takes over a freed block whose dependency is still retained;
the details are in the script. With dtrace=1, the test also counts how
often this precondition is met, which works on a fixed kernel too.
PR: 297976
Reviewed by: kib, pho
Tested by: pho
Sponsored by: Sippy Software, Inc.
Differential revision: https://reviews.freebsd.org/D59356
Diffstat (limited to 'stand/efi/liblua32efi/Makefile')
0 files changed, 0 insertions, 0 deletions
