mirror_zfs/tests/zfs-tests/tests/functional
George Amanakis 431083f75b
Fixes in persistent error log
Address the following bugs in persistent error log:

1) Check nested clones, eg "fs->snap->clone->snap2->clone2".

2) When deleting files containing error blocks in those clones (from
   "clone" the example above), do not break the check chain.

3) When deleting files in the originating fs before syncing the errlog
   to disk, do not break the check chain. This happens because at the
   time of introducing the error block in the error list, we do not have
   its birth txg and the head filesystem. If the original file is
   deleted before the error list is synced to the error log (which is
   when we actually lookup the birth txg and the head filesystem), then
   we do not have access to this info anymore and break the check chain.

The most prominent change is related to achieving (3). We expand the
spa_error_entry_t structure to accommodate the newly introduced
zbookmark_err_phys_t structure (containing the birth txg of the error
block).Due to compatibility reasons we cannot remove the
zbookmark_phys_t structure and we also need to place the new structure
after se_avl, so it is not accounted for in avl_find(). Then we modify
spa_log_error() to also provide the birth txg of the error block. With
these changes in place we simplify the previously introduced function
get_head_and_birth_txg() (now named get_head_ds()).

We chose not to follow the same approach for the head filesystem (thus
completely removing get_head_ds()) to avoid introducing new lock
contentions.

The stack sizes of nested functions (as measured by checkstack.pl in the
linux kernel) are:
check_filesystem [zfs]: 272 (was 912)
check_clones [zfs]: 64

We also introduced two new tests covering the above changes.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: George Amanakis <gamanakis@gmail.com>
Closes #14633
2023-03-28 16:51:58 -07:00
..
acl Skip permission checks for extended attributes 2022-12-12 10:21:37 -08:00
alloc_class autoconf: use include directives instead of recursing down test data 2022-05-10 10:20:19 -07:00
append Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
arc Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
atime Enable relatime by default 2022-08-12 14:20:25 -07:00
bootfs Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
btree autoconf: use include directives instead of recursing down test data 2022-05-10 10:20:19 -07:00
cache Enable relatime by default 2022-08-12 14:20:25 -07:00
cachefile Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
casenorm autoconf: use include directives instead of recursing down test data 2022-05-10 10:20:19 -07:00
channel_program Add zfs.sync.snapshot_rename 2022-09-02 13:31:19 -07:00
chattr Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
checksum Add Linux posix_fadvise support 2022-09-08 10:29:41 -07:00
clean_mirror Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
cli_root Fixes in persistent error log 2023-03-28 16:51:58 -07:00
cli_user Add zilstat script to report zil kstats in a user friendly manner 2022-09-02 13:24:07 -07:00
compression Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
cp_files Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
crtime Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
ctime Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
deadman Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
delegate Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
devices Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
dos_attributes Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
events Configure zed's diagnosis engine with vdev properties 2023-01-23 13:14:25 -08:00
exec Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
fadvise Add Linux posix_fadvise support 2022-09-08 10:29:41 -07:00
fallocate ZTS: fallocate tests fail with hard coded values 2022-09-22 16:42:34 -06:00
fault zed: Prevent special vdev to be replaced by hot spare 2022-11-04 11:33:47 -07:00
features Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
grow Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
history Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
hkdf Enable -Wwrite-strings 2022-06-29 14:08:54 -07:00
idmap_mount Support idmapped mount in user namespace 2022-11-08 10:28:56 -08:00
inheritance Add options to zfs redundant_metadata property 2022-10-19 17:07:51 -07:00
inuse Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
io ZTS: Fix io_uring support check 2022-07-26 14:39:23 -07:00
l2arc arc_read()/arc_access() refactoring and cleanup 2022-12-22 12:10:24 -08:00
large_files Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
largest_pool Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
libzfs Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
limits autoconf: use include directives instead of recursing down test data 2022-05-10 10:20:19 -07:00
link_count Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
log_spacemap autoconf: use include directives instead of recursing down test data 2022-05-10 10:20:19 -07:00
migration ZTS: Minor fixes 2023-02-23 17:10:46 -08:00
mmap Fix buffered/direct/mmap I/O race 2023-02-23 10:57:24 -08:00
mmp Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
mount Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
mv_files Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
nestedfs Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
no_space EIO caused by encryption + recursive gang 2023-02-06 09:37:06 -08:00
nopwrite nopwrites on dmu_sync-ed blocks can result in a panic 2022-12-02 17:45:33 -08:00
online_offline Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
pam Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
pool_checkpoint autoconf: use include directives instead of recursing down test data 2022-05-10 10:20:19 -07:00
pool_names Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
poolversion Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
privilege Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
procfs Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
projectquota Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
pyzfs Python3: replace distutils with sysconfig 2022-11-28 11:39:41 -08:00
quota Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
raidz Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
redacted_send Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
redundancy Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
refquota Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
refreserv Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
removal nopwrites on dmu_sync-ed blocks can result in a panic 2022-12-02 17:45:33 -08:00
rename_dirs Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
renameat2 Replace dead opensolaris.org license links 2023-03-14 14:44:01 -07:00
replacement Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
reservation Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
rootpool Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
rsend Fix incremental receive silently failing for recursive sends 2023-03-10 09:52:44 -08:00
scrub_mirror Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
simd Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
slog zfs_rename: support RENAME_* flags 2022-10-28 09:49:20 -07:00
snapshot Replace dead opensolaris.org license links 2023-03-14 14:44:01 -07:00
snapused Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
sparse Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
stat Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
suid Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
tmpfile Fix oversights from 4170ae4e 2022-10-31 10:01:04 -07:00
trim arc_read()/arc_access() refactoring and cleanup 2022-12-22 12:10:24 -08:00
truncate Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
upgrade Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
user_namespace Fix minor issues in namespace delegation support 2022-09-20 15:25:21 -07:00
userquota Handle and detect #13709's unlock regression (#14161) 2022-11-15 14:44:12 -08:00
vdev_zaps autoconf: use include directives instead of recursing down test data 2022-05-10 10:20:19 -07:00
write_dirs Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
xattr Replace dead opensolaris.org license link 2022-07-11 14:16:13 -07:00
zpool_influxdb autoconf: use include directives instead of recursing down test data 2022-05-10 10:20:19 -07:00
zvol arc_read()/arc_access() refactoring and cleanup 2022-12-22 12:10:24 -08:00