mirror_zfs/tests/zfs-tests/tests/functional
Rob Norris 54b1b1d893 import: require force when cachefile hostid doesn't match on-disk
Previously, if a cachefile is passed to zpool import, the cached config
is mostly offered as-is to ZFS_IOC_POOL_TRYIMPORT->spa_tryimport(), and
the results are taken as the canonical pool config and handed back to
ZFS_IOC_POOL_IMPORT.

In the course of its operation, spa_load() will inspect the pool and
build a new config from what it finds on disk. However, it then
regenerates a new config ready to import, and so rightly sets the hostid
and hostname for the local host in the config it returns.

Because of this, the "require force" checks always decide the pool is
exported and last touched by the local host, even if this is not true,
which is possible in a HA environment when MMP is not enabled. The pool
may be imported on another head, but the import checks still pass here,
so the pool ends up imported on both.

(This doesn't happen when a cachefile isn't used, because the pool
config is discovered in userspace in zpool_find_import(), and that does
find the on-disk hostid and hostname correctly).

Since the systemd zfs-import-cache.service unit uses cachefile imports,
this can lead to a system returning after a crash with a "valid"
cachefile on disk and automatically, quietly, importing a pool that has
already been taken up by a secondary head.

This commit causes the on-disk hostid and hostname to be included in the
ZPOOL_CONFIG_LOAD_INFO item in the returned config, and then changes the
"force" checks for zpool import to use them if present.

This method should give no change in behaviour for old userspace on new
kernels (they won't know to look for the new config items) and for new
userspace on old kernels (the won't find the new config items).

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Closes #15290
2023-10-06 09:24:44 -07:00
..
acl Skip permission checks for extended attributes 2022-12-12 10:21:37 -08:00
alloc_class Refine special_small_blocks property validation 2023-05-12 09:12:28 -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
block_cloning tests/block_cloning: sync before write in fallback test 2023-10-06 08:39:20 -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 import: require force when cachefile hostid doesn't match on-disk 2023-10-06 09:24:44 -07:00
cli_user zil: Add some more statistics. 2023-05-25 13:51:53 -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 Debug auto_replace_001_pos failures 2023-05-09 08:57:02 -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 Store the L2ARC device ashift in the vdev label 2023-06-14 08:01:17 -07: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 Fix ENOSPC for extended quota 2023-09-28 14:10:07 -07: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 PAM: support password changes even when not mounted 2023-05-31 17:01:11 -07:00
pool_checkpoint ZTS: Skip checkpoint_discard_busy 2023-06-09 11:10:01 -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 Increase limit of redaction list by using spill block 2023-08-26 11:34:43 -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 ZTS: Skip send_raw_ashift on FreeBSD 2023-06-14 08:04:05 -07: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 Reduce trim min size even lower for tests to reduce flakiness 2023-09-27 12:06:24 -07: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 Create zap for root vdev 2023-04-20 10:07:56 -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 ZTS: zvol_misc_trim disable blk mq 2023-05-29 12:55:35 -07:00