git: 409247a6cbd1 - releng/15.1 - zfs: merge openzfs/zfs@6330a45b0 (zfs-2.4-release) into stable/15
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 15 May 2026 00:00:52 UTC
The branch releng/15.1 has been updated by cperciva:
URL: https://cgit.FreeBSD.org/src/commit/?id=409247a6cbd11e3510025e025f3b82184c3de17c
commit 409247a6cbd11e3510025e025f3b82184c3de17c
Author: Martin Matuska <mm@FreeBSD.org>
AuthorDate: 2026-05-13 19:53:01 +0000
Commit: Colin Percival <cperciva@FreeBSD.org>
CommitDate: 2026-05-14 23:58:46 +0000
zfs: merge openzfs/zfs@6330a45b0 (zfs-2.4-release) into stable/15
OpenZFS 2.4.2
Notable upstream pull request merges:
#18208 6f14581e1 Cleanup allocation class selection
#18235 7590972f7 Prevent range tree corruption race by updating
dnode_sync()
#18255 b06caaeec range_tree: use zfs_panic_recover() for partial-overlap
remove
#18258 33961142a Fix deadlock on dmu_tx_assign() from vdev_rebuild()
#18262 02ed09106 Fix check for .cfi_negate_ra_state on aarch64
#18263 9f92266b7 Fix redundant declaration of dsl_pool_t
#18276 3862aadf7 Fix vdev_rebuild_range() tx commit
#18290 a94b137aa FreeBSD: Improve dmesg kernel message prefix
#18294 938c8c98b draid: fix data corruption after disk clear
#18310 b40cd9191 Fix s_active leak in zfsvfs_hold() when z_unmounted is
true
#18380 9b8ccbd2c draid: fix import failure after disks replacements
#18399 4bb759274 Add support for POSIX_FADV_DONTNEED
#18403 aba3ed30a fix memleak in spa_errlog.c
#18405 e9a8c6e08 draid: allow seq resilver reads from degraded vdevs
#18414 da44040bb draid: fix cksum errors after rebuild with degraded disks
#18421 e7524594a Fix read corruption after block clone after truncate
#18440 b8addf922 dmu_direct: avoid UAF in dmu_write_direct_done()
#18473 76fd64ac9 Fix rare cksum errors after rebuild
#18482 fc87e269e Initialize vr_last_txg for rebuild
#18489 38501e182 Fix long POSIX_FADV_DONTNEED for single block files
Approved by: re (cperciva)
Obtained from: OpenZFS
OpenZFS commit: 6330a45b06d20125de679aae5f63ba14082671ef
OpenZFS tag: zfs-2.4.2
(cherry picked from commit a40f24ec28554c2387e766a47d2d4cb910d95865)
---
.../openzfs/.github/workflows/checkstyle.yaml | 7 +-
sys/contrib/openzfs/.github/workflows/codeql.yml | 2 +-
.../.github/workflows/scripts/generate-ci-type.py | 33 +-
.../.github/workflows/scripts/merge_summary.awk | 38 ++
.../.github/workflows/scripts/qemu-1-setup.sh | 43 +-
.../.github/workflows/scripts/qemu-2-start.sh | 81 ++-
.../.github/workflows/scripts/qemu-3-deps-vm.sh | 22 +-
.../.github/workflows/scripts/qemu-4-build-vm.sh | 11 +-
.../.github/workflows/scripts/qemu-6-tests.sh | 4 +-
.../.github/workflows/scripts/qemu-7-prepare.sh | 47 +-
.../.github/workflows/scripts/qemu-8-summary.sh | 8 +-
.../workflows/scripts/qemu-9-summary-page.sh | 4 +-
sys/contrib/openzfs/.github/workflows/smatch.yml | 4 +-
sys/contrib/openzfs/.github/workflows/zfs-arm.yml | 40 ++
.../.github/workflows/zfs-qemu-packages.yml | 25 +-
sys/contrib/openzfs/.github/workflows/zfs-qemu.yml | 46 +-
sys/contrib/openzfs/.github/workflows/zloop.yml | 7 +-
sys/contrib/openzfs/META | 4 +-
sys/contrib/openzfs/Makefile.am | 1 +
sys/contrib/openzfs/README.md | 42 +-
sys/contrib/openzfs/autogen.sh | 1 +
sys/contrib/openzfs/cmd/Makefile.am | 1 +
sys/contrib/openzfs/cmd/raidz_test/Makefile.am | 1 +
sys/contrib/openzfs/cmd/zdb/Makefile.am | 1 +
sys/contrib/openzfs/cmd/zed/Makefile.am | 1 +
sys/contrib/openzfs/cmd/zed/zed.d/Makefile.am | 1 +
sys/contrib/openzfs/cmd/zed/zed_event.c | 2 +-
sys/contrib/openzfs/cmd/zfs/Makefile.am | 1 +
sys/contrib/openzfs/cmd/zfs/zfs_main.c | 2 +-
sys/contrib/openzfs/cmd/zinject/Makefile.am | 1 +
sys/contrib/openzfs/cmd/zpool/Makefile.am | 1 +
sys/contrib/openzfs/cmd/zpool_influxdb/Makefile.am | 1 +
sys/contrib/openzfs/cmd/zstream/Makefile.am | 1 +
sys/contrib/openzfs/config/CppCheck.am | 1 +
sys/contrib/openzfs/config/Rules.am | 1 +
sys/contrib/openzfs/config/Shellcheck.am | 1 +
sys/contrib/openzfs/config/Substfiles.am | 1 +
sys/contrib/openzfs/config/always-arch.m4 | 1 +
.../openzfs/config/always-compiler-options.m4 | 1 +
sys/contrib/openzfs/config/always-cppcheck.m4 | 1 +
sys/contrib/openzfs/config/always-parallel.m4 | 1 +
sys/contrib/openzfs/config/always-python.m4 | 1 +
sys/contrib/openzfs/config/always-pyzfs.m4 | 1 +
sys/contrib/openzfs/config/always-sed.m4 | 1 +
sys/contrib/openzfs/config/always-shellcheck.m4 | 1 +
sys/contrib/openzfs/config/always-system.m4 | 1 +
sys/contrib/openzfs/config/ax_compare_version.m4 | 1 +
sys/contrib/openzfs/config/ax_count_cpus.m4 | 1 +
sys/contrib/openzfs/config/ax_python_devel.m4 | 1 +
sys/contrib/openzfs/config/ax_restore_flags.m4 | 1 +
sys/contrib/openzfs/config/ax_save_flags.m4 | 1 +
sys/contrib/openzfs/config/deb.am | 21 +-
sys/contrib/openzfs/config/find_system_library.m4 | 1 +
sys/contrib/openzfs/config/gettext.m4 | 1 +
sys/contrib/openzfs/config/host-cpu-c-abi.m4 | 1 +
sys/contrib/openzfs/config/iconv.m4 | 1 +
.../openzfs/config/kernel-access-ok-type.m4 | 1 +
sys/contrib/openzfs/config/kernel-acl.m4 | 32 +
sys/contrib/openzfs/config/kernel-add-disk.m4 | 1 +
sys/contrib/openzfs/config/kernel-assign_str.m4 | 1 +
sys/contrib/openzfs/config/kernel-automount.m4 | 1 +
sys/contrib/openzfs/config/kernel-bio.m4 | 1 +
sys/contrib/openzfs/config/kernel-bio_max_segs.m4 | 1 +
sys/contrib/openzfs/config/kernel-blk-queue.m4 | 27 +
sys/contrib/openzfs/config/kernel-blkdev.m4 | 1 +
.../config/kernel-block-device-operations.m4 | 1 +
.../openzfs/config/kernel-commit-metadata.m4 | 1 +
.../openzfs/config/kernel-config-defined.m4 | 1 +
.../config/kernel-copy-from-user-inatomic.m4 | 29 -
.../openzfs/config/kernel-cpu_has_feature.m4 | 1 +
.../openzfs/config/kernel-declare-event-class.m4 | 1 +
sys/contrib/openzfs/config/kernel-dentry-alias.m4 | 32 +
.../openzfs/config/kernel-dentry-operations.m4 | 1 +
.../openzfs/config/kernel-discard-granularity.m4 | 1 +
sys/contrib/openzfs/config/kernel-drop-inode.m4 | 1 +
sys/contrib/openzfs/config/kernel-file.m4 | 1 +
sys/contrib/openzfs/config/kernel-filelock.m4 | 23 +
.../openzfs/config/kernel-filemap-splice-read.m4 | 1 +
.../openzfs/config/kernel-flush_dcache_page.m4 | 1 +
sys/contrib/openzfs/config/kernel-fmode-t.m4 | 1 +
.../openzfs/config/kernel-follow-down-one.m4 | 1 +
sys/contrib/openzfs/config/kernel-fpu.m4 | 1 +
sys/contrib/openzfs/config/kernel-free-inode.m4 | 1 +
sys/contrib/openzfs/config/kernel-fs-context.m4 | 36 ++
sys/contrib/openzfs/config/kernel-fst-mount.m4 | 30 -
sys/contrib/openzfs/config/kernel-fsync-bdev.m4 | 1 +
.../openzfs/config/kernel-generic_fadvise.m4 | 1 +
.../openzfs/config/kernel-generic_fillattr.m4 | 1 +
.../openzfs/config/kernel-generic_io_acct.m4 | 1 +
sys/contrib/openzfs/config/kernel-genhd-flags.m4 | 1 +
sys/contrib/openzfs/config/kernel-get-disk-ro.m4 | 1 +
sys/contrib/openzfs/config/kernel-iattr-vfsid.m4 | 1 +
sys/contrib/openzfs/config/kernel-idmap_mnt_api.m4 | 1 +
sys/contrib/openzfs/config/kernel-inode-create.m4 | 1 +
sys/contrib/openzfs/config/kernel-inode-getattr.m4 | 1 +
sys/contrib/openzfs/config/kernel-inode-lookup.m4 | 1 +
.../openzfs/config/kernel-inode-permission.m4 | 1 +
sys/contrib/openzfs/config/kernel-inode-setattr.m4 | 1 +
sys/contrib/openzfs/config/kernel-inode-state.m4 | 1 +
sys/contrib/openzfs/config/kernel-inode-times.m4 | 1 +
.../openzfs/config/kernel-insert-inode-locked.m4 | 1 +
.../openzfs/config/kernel-is_owner_or_cap.m4 | 1 +
sys/contrib/openzfs/config/kernel-kasan-enabled.m4 | 1 +
.../openzfs/config/kernel-kmap-atomic-args.m4 | 1 +
.../openzfs/config/kernel-kmap-local-page.m4 | 1 +
sys/contrib/openzfs/config/kernel-kmem.m4 | 1 +
sys/contrib/openzfs/config/kernel-kthread.m4 | 1 +
sys/contrib/openzfs/config/kernel-kuid-helpers.m4 | 1 +
sys/contrib/openzfs/config/kernel-kuidgid.m4 | 1 +
.../openzfs/config/kernel-make-request-fn.m4 | 1 +
sys/contrib/openzfs/config/kernel-misc-minor.m4 | 1 +
sys/contrib/openzfs/config/kernel-mkdir.m4 | 1 +
sys/contrib/openzfs/config/kernel-mknod.m4 | 1 +
sys/contrib/openzfs/config/kernel-mm-page-flags.m4 | 1 +
sys/contrib/openzfs/config/kernel-mm-pagemap.m4 | 1 +
sys/contrib/openzfs/config/kernel-namespace.m4 | 1 +
sys/contrib/openzfs/config/kernel-objtool.m4 | 1 +
.../config/kernel-pagemap-folio_wait_bit.m4 | 1 +
.../config/kernel-pagemap-readahead-page.m4 | 1 +
sys/contrib/openzfs/config/kernel-pde-data.m4 | 1 +
sys/contrib/openzfs/config/kernel-percpu.m4 | 1 +
.../openzfs/config/kernel-pin-user-pages.m4 | 1 +
.../openzfs/config/kernel-proc-operations.m4 | 1 +
sys/contrib/openzfs/config/kernel-reclaim_state.m4 | 1 +
.../openzfs/config/kernel-register_sysctl_table.m4 | 1 +
sys/contrib/openzfs/config/kernel-rename.m4 | 1 +
.../openzfs/config/kernel-revalidate-disk-size.m4 | 1 +
sys/contrib/openzfs/config/kernel-sb-dying.m4 | 1 +
sys/contrib/openzfs/config/kernel-sb-wb-err.m4 | 1 +
sys/contrib/openzfs/config/kernel-sched.m4 | 1 +
.../openzfs/config/kernel-security-inode-init.m4 | 1 +
sys/contrib/openzfs/config/kernel-set-nlink.m4 | 1 +
.../openzfs/config/kernel-setattr-prepare.m4 | 1 +
sys/contrib/openzfs/config/kernel-sget-args.m4 | 1 +
sys/contrib/openzfs/config/kernel-show-options.m4 | 1 +
sys/contrib/openzfs/config/kernel-shrink.m4 | 1 +
sys/contrib/openzfs/config/kernel-siginfo.m4 | 1 +
sys/contrib/openzfs/config/kernel-stdarg.m4 | 1 +
sys/contrib/openzfs/config/kernel-strlcpy.m4 | 1 +
sys/contrib/openzfs/config/kernel-symlink.m4 | 1 +
sys/contrib/openzfs/config/kernel-sysfs.m4 | 1 +
sys/contrib/openzfs/config/kernel-timer.m4 | 1 +
sys/contrib/openzfs/config/kernel-tmpfile.m4 | 1 +
.../openzfs/config/kernel-totalhigh_pages.m4 | 1 +
.../openzfs/config/kernel-totalram-pages-func.m4 | 1 +
.../openzfs/config/kernel-truncate-setsize.m4 | 1 +
sys/contrib/openzfs/config/kernel-types.m4 | 1 +
sys/contrib/openzfs/config/kernel-usleep_range.m4 | 1 +
.../openzfs/config/kernel-vfs-file_range.m4 | 1 +
.../config/kernel-vfs-filemap_dirty_folio.m4 | 1 +
sys/contrib/openzfs/config/kernel-vfs-fsync.m4 | 1 +
sys/contrib/openzfs/config/kernel-vfs-iov_iter.m4 | 1 +
.../openzfs/config/kernel-vfs-migrate_folio.m4 | 1 +
.../openzfs/config/kernel-vfs-migratepage.m4 | 1 +
.../openzfs/config/kernel-vfs-read_folio.m4 | 1 +
sys/contrib/openzfs/config/kernel-vfs-readpages.m4 | 1 +
.../openzfs/config/kernel-vfs-set_page_dirty.m4 | 1 +
sys/contrib/openzfs/config/kernel-vfs-writepage.m4 | 1 +
sys/contrib/openzfs/config/kernel-writeback.m4 | 1 +
sys/contrib/openzfs/config/kernel-xattr-handler.m4 | 1 +
sys/contrib/openzfs/config/kernel-zero_page.m4 | 1 +
sys/contrib/openzfs/config/kernel.m4 | 22 +-
sys/contrib/openzfs/config/lib-ld.m4 | 1 +
sys/contrib/openzfs/config/lib-link.m4 | 1 +
sys/contrib/openzfs/config/lib-prefix.m4 | 1 +
sys/contrib/openzfs/config/mount-helper.m4 | 1 +
sys/contrib/openzfs/config/nls.m4 | 1 +
sys/contrib/openzfs/config/pkg.m4 | 1 +
sys/contrib/openzfs/config/po.m4 | 1 +
sys/contrib/openzfs/config/progtest.m4 | 1 +
sys/contrib/openzfs/config/rpm.am | 1 +
sys/contrib/openzfs/config/tgz.am | 1 +
sys/contrib/openzfs/config/toolchain-cfi.m4 | 33 +
sys/contrib/openzfs/config/toolchain-simd.m4 | 1 +
sys/contrib/openzfs/config/user-aio.h.m4 | 1 +
sys/contrib/openzfs/config/user-backtrace.m4 | 1 +
sys/contrib/openzfs/config/user-clock_gettime.m4 | 1 +
sys/contrib/openzfs/config/user-dracut.m4 | 1 +
sys/contrib/openzfs/config/user-gettext.m4 | 1 +
sys/contrib/openzfs/config/user-libaio.m4 | 1 +
sys/contrib/openzfs/config/user-libatomic.m4 | 1 +
sys/contrib/openzfs/config/user-libblkid.m4 | 1 +
sys/contrib/openzfs/config/user-libcrypto.m4 | 1 +
sys/contrib/openzfs/config/user-libexec.m4 | 1 +
sys/contrib/openzfs/config/user-libfetch.m4 | 1 +
sys/contrib/openzfs/config/user-libtirpc.m4 | 1 +
sys/contrib/openzfs/config/user-libudev.m4 | 1 +
sys/contrib/openzfs/config/user-libunwind.m4 | 1 +
sys/contrib/openzfs/config/user-libuuid.m4 | 1 +
sys/contrib/openzfs/config/user-makedev.m4 | 1 +
sys/contrib/openzfs/config/user-mount-setattr.m4 | 27 +
sys/contrib/openzfs/config/user-pam.m4 | 1 +
sys/contrib/openzfs/config/user-runstatedir.m4 | 1 +
sys/contrib/openzfs/config/user-statx.m4 | 2 +
sys/contrib/openzfs/config/user-systemd.m4 | 1 +
sys/contrib/openzfs/config/user-sysvinit.m4 | 1 +
sys/contrib/openzfs/config/user-udev.m4 | 1 +
sys/contrib/openzfs/config/user-zlib.m4 | 1 +
sys/contrib/openzfs/config/user.m4 | 2 +
sys/contrib/openzfs/config/zfs-build.m4 | 4 +-
sys/contrib/openzfs/config/zfs-meta.m4 | 1 +
sys/contrib/openzfs/configure.ac | 2 +-
sys/contrib/openzfs/contrib/Makefile.am | 1 +
.../openzfs/contrib/bash_completion.d/Makefile.am | 1 +
sys/contrib/openzfs/contrib/bpftrace/Makefile.am | 1 +
sys/contrib/openzfs/contrib/debian/Makefile.am | 1 +
sys/contrib/openzfs/contrib/dracut/Makefile.am | 1 +
sys/contrib/openzfs/contrib/initramfs/Makefile.am | 1 +
sys/contrib/openzfs/contrib/initramfs/scripts/zfs | 8 +-
.../openzfs/contrib/pam_zfs_key/Makefile.am | 1 +
sys/contrib/openzfs/contrib/pyzfs/Makefile.am | 1 +
sys/contrib/openzfs/contrib/zcp/Makefile.am | 1 +
sys/contrib/openzfs/etc/Makefile.am | 1 +
.../system-generators/zfs-mount-generator.c | 5 +-
sys/contrib/openzfs/include/Makefile.am | 1 +
sys/contrib/openzfs/include/os/freebsd/Makefile.am | 1 +
sys/contrib/openzfs/include/os/linux/Makefile.am | 1 +
.../include/os/linux/kernel/linux/dcache_compat.h | 2 +
.../include/os/linux/kernel/linux/xattr_compat.h | 17 +
.../include/os/linux/zfs/sys/zfs_vfsops_os.h | 14 +-
sys/contrib/openzfs/include/sys/dbuf.h | 2 +
sys/contrib/openzfs/include/sys/dmu.h | 2 +
sys/contrib/openzfs/include/sys/dnode.h | 13 +
sys/contrib/openzfs/include/sys/spa.h | 1 +
sys/contrib/openzfs/include/sys/vdev_raidz_impl.h | 1 +
sys/contrib/openzfs/include/sys/vdev_rebuild.h | 4 +-
sys/contrib/openzfs/lib/Makefile.am | 1 +
sys/contrib/openzfs/lib/libavl/Makefile.am | 1 +
sys/contrib/openzfs/lib/libefi/Makefile.am | 1 +
sys/contrib/openzfs/lib/libicp/Makefile.am | 1 +
sys/contrib/openzfs/lib/libnvpair/Makefile.am | 1 +
sys/contrib/openzfs/lib/libspl/Makefile.am | 1 +
sys/contrib/openzfs/lib/libspl/include/Makefile.am | 1 +
.../openzfs/lib/libspl/os/linux/getmntany.c | 9 +-
sys/contrib/openzfs/lib/libuutil/uu_ident.c | 2 +-
sys/contrib/openzfs/lib/libzdb/Makefile.am | 1 +
sys/contrib/openzfs/lib/libzfs/Makefile.am | 1 +
sys/contrib/openzfs/lib/libzfs/libzfs_dataset.c | 49 +-
sys/contrib/openzfs/lib/libzfs/libzfs_diff.c | 4 +-
sys/contrib/openzfs/lib/libzfs/libzfs_impl.h | 17 +
sys/contrib/openzfs/lib/libzfs/libzfs_mount.c | 43 +-
sys/contrib/openzfs/lib/libzfs/libzfs_pool.c | 2 +-
sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c | 2 +-
.../openzfs/lib/libzfs/os/freebsd/libzfs_zmount.c | 11 +
.../openzfs/lib/libzfs/os/linux/libzfs_mount_os.c | 143 +++++
sys/contrib/openzfs/lib/libzfs_core/Makefile.am | 1 +
sys/contrib/openzfs/lib/libzfsbootenv/Makefile.am | 1 +
sys/contrib/openzfs/lib/libzpool/Makefile.am | 1 +
sys/contrib/openzfs/lib/libzstd/Makefile.am | 1 +
sys/contrib/openzfs/lib/libzutil/Makefile.am | 1 +
.../lib/libzutil/os/linux/zutil_device_path_os.c | 16 +-
sys/contrib/openzfs/man/Makefile.am | 1 +
.../icp/asm-aarch64/blake3/b3_aarch64_sse2.S | 4 +-
.../icp/asm-aarch64/blake3/b3_aarch64_sse41.S | 4 +-
sys/contrib/openzfs/module/nvpair/nvpair.c | 5 +-
.../openzfs/module/os/freebsd/spl/spl_cmn_err.c | 10 +-
.../openzfs/module/os/freebsd/zfs/zfs_vnops_os.c | 4 +-
.../openzfs/module/os/linux/zfs/vdev_disk.c | 4 +
.../openzfs/module/os/linux/zfs/zfs_ctldir.c | 35 +-
sys/contrib/openzfs/module/os/linux/zfs/zfs_uio.c | 13 +-
.../openzfs/module/os/linux/zfs/zfs_vfsops.c | 231 +------
sys/contrib/openzfs/module/os/linux/zfs/zpl_file.c | 44 +-
.../openzfs/module/os/linux/zfs/zpl_super.c | 681 ++++++++++++++++++---
sys/contrib/openzfs/module/zfs/dbuf.c | 78 ++-
sys/contrib/openzfs/module/zfs/dmu.c | 39 +-
sys/contrib/openzfs/module/zfs/dmu_direct.c | 8 +-
sys/contrib/openzfs/module/zfs/dmu_objset.c | 2 +-
sys/contrib/openzfs/module/zfs/dnode.c | 2 +
sys/contrib/openzfs/module/zfs/dnode_sync.c | 105 ++--
sys/contrib/openzfs/module/zfs/dsl_bookmark.c | 18 +-
sys/contrib/openzfs/module/zfs/dsl_dir.c | 2 +-
sys/contrib/openzfs/module/zfs/range_tree.c | 2 +-
sys/contrib/openzfs/module/zfs/spa.c | 2 +-
sys/contrib/openzfs/module/zfs/spa_errlog.c | 2 +-
sys/contrib/openzfs/module/zfs/spa_misc.c | 48 +-
sys/contrib/openzfs/module/zfs/vdev.c | 29 +-
sys/contrib/openzfs/module/zfs/vdev_draid.c | 76 ++-
sys/contrib/openzfs/module/zfs/vdev_mirror.c | 13 +-
sys/contrib/openzfs/module/zfs/vdev_raidz.c | 44 +-
sys/contrib/openzfs/module/zfs/vdev_rebuild.c | 56 +-
sys/contrib/openzfs/module/zfs/zfs_ioctl.c | 1 +
sys/contrib/openzfs/module/zfs/zio.c | 6 +-
sys/contrib/openzfs/rpm/Makefile.am | 1 +
sys/contrib/openzfs/scripts/Makefile.am | 1 +
sys/contrib/openzfs/scripts/spdxcheck.pl | 35 +-
sys/contrib/openzfs/scripts/zfs-tests.sh | 16 +-
sys/contrib/openzfs/tests/Makefile.am | 1 +
sys/contrib/openzfs/tests/runfiles/common.run | 15 +-
sys/contrib/openzfs/tests/runfiles/linux.run | 4 +
.../openzfs/tests/test-runner/bin/zts-report.py.in | 3 +-
sys/contrib/openzfs/tests/zfs-tests/Makefile.am | 1 +
sys/contrib/openzfs/tests/zfs-tests/cmd/.gitignore | 2 +
.../openzfs/tests/zfs-tests/cmd/Makefile.am | 4 +
.../tests/zfs-tests/cmd/clone_after_trunc.c | 117 ++++
sys/contrib/openzfs/tests/zfs-tests/cmd/setlease.c | 126 ++++
.../openzfs/tests/zfs-tests/cmd/threadsappend.c | 8 +-
.../openzfs/tests/zfs-tests/include/commands.cfg | 6 +-
.../openzfs/tests/zfs-tests/include/libtest.shlib | 15 +
.../openzfs/tests/zfs-tests/tests/Makefile.am | 11 +
.../block_cloning/block_cloning_after_trunc.ksh | 31 +
.../tests/functional/cli_root/zfs_list/cleanup.ksh | 30 +
.../tests/functional/cli_root/zfs_list/setup.ksh | 32 +
.../cli_root/zfs_list/zfs_list_009_pos.ksh | 69 +++
.../tests/functional/fadvise/fadvise_dontneed.ksh | 70 +++
.../zfs-tests/tests/functional/lease/cleanup.ksh | 26 +
.../tests/functional/lease/lease_setlease.ksh | 44 ++
.../zfs-tests/tests/functional/lease/setup.ksh | 27 +
.../tests/functional/redundancy/redundancy.kshlib | 71 ++-
.../functional/redundancy/redundancy_draid.ksh | 12 +-
.../redundancy/redundancy_draid_damaged1.ksh | 7 +-
.../redundancy/redundancy_draid_damaged2.ksh | 14 +-
.../redundancy/redundancy_draid_degraded1.ksh | 136 ++++
.../redundancy/redundancy_draid_degraded2.ksh | 152 +++++
.../redundancy/redundancy_draid_spare1.ksh | 13 +-
.../redundancy/redundancy_draid_spare2.ksh | 8 +-
.../redundancy/redundancy_draid_spare3.ksh | 28 +-
sys/contrib/openzfs/udev/Makefile.am | 1 +
sys/modules/zfs/zfs_config.h | 29 +-
sys/modules/zfs/zfs_gitrev.h | 2 +-
319 files changed, 3254 insertions(+), 837 deletions(-)
diff --git a/sys/contrib/openzfs/.github/workflows/checkstyle.yaml b/sys/contrib/openzfs/.github/workflows/checkstyle.yaml
index a01a4fe8587c..ddcc2b8581fa 100644
--- a/sys/contrib/openzfs/.github/workflows/checkstyle.yaml
+++ b/sys/contrib/openzfs/.github/workflows/checkstyle.yaml
@@ -56,9 +56,10 @@ jobs:
- name: Prepare artifacts
if: failure() && steps.CheckABI.outcome == 'failure'
run: |
- find -name *.abi | tar -cf abi_files.tar -T -
- - uses: actions/upload-artifact@v4
+ find -name *.abi | tar -cjf abi_files.tar.bz2 -T -
+ - uses: actions/upload-artifact@v7
if: failure() && steps.CheckABI.outcome == 'failure'
with:
name: New ABI files (use only if you're sure about interface changes)
- path: abi_files.tar
+ path: abi_files.tar.bz2
+ archive: false
diff --git a/sys/contrib/openzfs/.github/workflows/codeql.yml b/sys/contrib/openzfs/.github/workflows/codeql.yml
index e975d7dd00b9..689fe71fddc3 100644
--- a/sys/contrib/openzfs/.github/workflows/codeql.yml
+++ b/sys/contrib/openzfs/.github/workflows/codeql.yml
@@ -28,7 +28,7 @@ jobs:
echo "MAKEFLAGS=-j$(nproc)" >> $GITHUB_ENV
- name: Checkout repository
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
diff --git a/sys/contrib/openzfs/.github/workflows/scripts/generate-ci-type.py b/sys/contrib/openzfs/.github/workflows/scripts/generate-ci-type.py
index 059d6ad3872b..b1910ab630af 100755
--- a/sys/contrib/openzfs/.github/workflows/scripts/generate-ci-type.py
+++ b/sys/contrib/openzfs/.github/workflows/scripts/generate-ci-type.py
@@ -3,13 +3,16 @@
"""
Determine the CI type based on the change list and commit message.
-Prints "quick" if (explicity required by user):
+Output format: "<type> <source>" where source is "manual" (from
+ZFS-CI-Type commit tag) or "auto" (from file change heuristics).
+
+Prints "quick manual" if:
- the *last* commit message contains 'ZFS-CI-Type: quick'
-or if (heuristics):
+or "quick auto" if (heuristics):
- the files changed are not in the list of specified directories, and
- all commit messages do not contain 'ZFS-CI-Type: (full|linux|freebsd)'
-Otherwise prints "full".
+Otherwise prints "full auto" (or "<type> manual" if explicitly requested).
"""
import sys
@@ -58,9 +61,10 @@ if __name__ == '__main__':
head, base = sys.argv[1:3]
- def output_type(type, reason):
- print(f'{prog}: will run {type} CI: {reason}', file=sys.stderr)
- print(type)
+ def output_type(type, source, reason):
+ print(f'{prog}: will run {type} CI ({source}): {reason}',
+ file=sys.stderr)
+ print(f'{type} {source}')
sys.exit(0)
# check last (HEAD) commit message
@@ -70,7 +74,8 @@ if __name__ == '__main__':
for line in last_commit_message_raw.stdout.decode().splitlines():
if line.strip().lower() == 'zfs-ci-type: quick':
- output_type('quick', f'requested by HEAD commit {head}')
+ output_type('quick', 'manual',
+ f'requested by HEAD commit {head}')
# check all commit messages
all_commit_message_raw = subprocess.run([
@@ -84,11 +89,14 @@ if __name__ == '__main__':
if line.startswith('ZFS-CI-Commit:'):
commit_ref = line.lstrip('ZFS-CI-Commit:').rstrip()
if line.strip().lower() == 'zfs-ci-type: freebsd':
- output_type('freebsd', f'requested by commit {commit_ref}')
+ output_type('freebsd', 'manual',
+ f'requested by commit {commit_ref}')
if line.strip().lower() == 'zfs-ci-type: linux':
- output_type('linux', f'requested by commit {commit_ref}')
+ output_type('linux', 'manual',
+ f'requested by commit {commit_ref}')
if line.strip().lower() == 'zfs-ci-type: full':
- output_type('full', f'requested by commit {commit_ref}')
+ output_type('full', 'manual',
+ f'requested by commit {commit_ref}')
# check changed files
changed_files_raw = subprocess.run([
@@ -104,9 +112,10 @@ if __name__ == '__main__':
for r in FULL_RUN_REGEX:
if r.match(f):
output_type(
- 'full',
+ 'full', 'auto',
f'changed file "{f}" matches pattern "{r.pattern}"'
)
# catch-all
- output_type('quick', 'no changed file matches full CI patterns')
+ output_type('quick', 'auto',
+ 'no changed file matches full CI patterns')
diff --git a/sys/contrib/openzfs/.github/workflows/scripts/merge_summary.awk b/sys/contrib/openzfs/.github/workflows/scripts/merge_summary.awk
index 2b00d00226c9..8a4ce9a2be06 100755
--- a/sys/contrib/openzfs/.github/workflows/scripts/merge_summary.awk
+++ b/sys/contrib/openzfs/.github/workflows/scripts/merge_summary.awk
@@ -17,6 +17,7 @@ BEGIN {
pass=0
fail=0
skip=0
+ killed=0
state=""
cl=0
el=0
@@ -49,6 +50,37 @@ BEGIN {
/PASS/{ if (state=="pass_count") {pass += $2}}
/FAIL/{ if (state=="pass_count") {fail += $2}}
/SKIP/{ if (state=="pass_count") {skip += $2}}
+
+# If the test was killed, you'll get a line like:
+#
+# [2026-04-22T03:34:17.694616] Test (Linux): /usr/share/zfs/zfs-tests/tests/functional/io/setup (run as root) [10:00] [KILLED]
+#
+# Parse out the test name minus the /usr/share/zfs/zfs-tests/tests/functional/'
+# part, and include the optional "(Linux): " line, as you can have the killed
+# tests in two categories, like:
+#
+# KILLED (Linux): io/setup
+# KILLED io/setup
+#
+/KILLED/{
+ extra=""
+ for(i=1; i<=NF; i++) {
+ # Look for optional "(Linux):" field
+ if ($i ~ "\\("){
+ extra=$i" "}
+
+ # Look for a field with a '/' in it. It is the test name.
+ if($i ~ "/") {
+ testname=$i
+ # Remove /usr/share/zfs/zfs-test/test/functional string
+ sub(/\/usr\/share\/zfs\/zfs-tests\/tests\/functional\//,"",testname)
+ testname=extra""testname
+ killed_tests[killed] = testname
+ killed++
+ break
+ }
+ }
+}
/Running Time/{
state="";
running[i]=$3;
@@ -106,4 +138,10 @@ END {
asort(unexpected_lines, sorted)
for (j in sorted)
print sorted[j]
+
+ # We don't want to sort killed tests, as the first test that was killed
+ # most likely caused the others to be killed.
+ print "\n\nTests that were killed:"
+ for (j in killed_tests)
+ print " KILLED "killed_tests[j]
}
diff --git a/sys/contrib/openzfs/.github/workflows/scripts/qemu-1-setup.sh b/sys/contrib/openzfs/.github/workflows/scripts/qemu-1-setup.sh
index 3d111561272d..5c41a4d6a497 100755
--- a/sys/contrib/openzfs/.github/workflows/scripts/qemu-1-setup.sh
+++ b/sys/contrib/openzfs/.github/workflows/scripts/qemu-1-setup.sh
@@ -6,6 +6,27 @@
set -eu
+# The default runner has a bunch of development tools and other things
+# that we do not need. Remove them here to free up a total of 35GB.
+#
+# First remove packages - this frees up ~10GB
+echo "Disk space before purge:"
+df -h /
+sudo docker image prune --all --force
+sudo docker builder prune -a
+unneeded="microsoft-edge-stable|azure-cli|google-cloud|google-chrome-stable|"\
+"temurin|llvm|firefox|mysql-server|snapd|android|dotnet|haskell|ghcup|"\
+"powershell|julia|swift|miniconda|chromium"
+sudo apt-get -y remove $(dpkg-query -f '${binary:Package}\n' -W | grep -E "'$unneeded'")
+sudo apt-get -y autoremove
+
+# Next, remove unneeded files in /usr. This frees up an additional 25GB.
+sudo rm -fr /usr/local/lib/android /usr/share/dotnet /usr/local/.ghcup \
+ /usr/share/swift /usr/local/share/powershell /usr/local/julia* \
+ /usr/share/miniconda /usr/local/share/chromium
+echo "Disk space after:"
+df -h /
+
# The default 'azure.archive.ubuntu.com' mirrors can be really slow.
# Prioritize the official Ubuntu mirrors.
#
@@ -42,7 +63,7 @@ sudo swapoff -a
# configurations. On one config you get two 75GB block devices, and on the
# other you get a single 150GB block device. Here's what both look like:
#
-# --- Two 75GB block devices ---
+# --- One 150GB block device ---
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sda 8:0 0 150G 0 disk
# ├─sda1 8:1 0 149G 0 part /
@@ -56,7 +77,7 @@ sudo swapoff -a
# lrwxrwxrwx 1 root root 11 Jan 29 18:07 azure_root-part15 -> ../../sda15
# lrwxrwxrwx 1 root root 11 Jan 29 18:07 azure_root-part16 -> ../../sda16
#
-# --- One 150GB block device ---
+# --- Two 75GB block devices ---
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# sda 8:0 0 75G 0 disk
# ├─sda1 8:1 0 74G 0 part /
@@ -118,18 +139,20 @@ fi
sudo mkswap $SWAP
sudo swapon $SWAP
+echo "Block devices:"
+lsblk
+
# adjust zfs module parameter and create pool
-exec 1>/dev/null
ARC_MIN=$((1024*1024*256))
ARC_MAX=$((1024*1024*512))
-echo $ARC_MIN | sudo tee /sys/module/zfs/parameters/zfs_arc_min
-echo $ARC_MAX | sudo tee /sys/module/zfs/parameters/zfs_arc_max
-echo 1 | sudo tee /sys/module/zfs/parameters/zvol_use_blk_mq
+echo $ARC_MIN | sudo tee /sys/module/zfs/parameters/zfs_arc_min >/dev/null
+echo $ARC_MAX | sudo tee /sys/module/zfs/parameters/zfs_arc_max >/dev/null
+echo 1 | sudo tee /sys/module/zfs/parameters/zvol_use_blk_mq >/dev/null
sudo zpool create -f -o ashift=12 zpool $DISKS -O relatime=off \
-O atime=off -O xattr=sa -O compression=lz4 -O sync=disabled \
-O redundant_metadata=none -O mountpoint=/mnt/tests
+echo "Status:"
+zpool status
-# no need for some scheduler
-for i in /sys/block/s*/queue/scheduler; do
- echo "none" | sudo tee $i
-done
+echo "Last dmesg:"
+sudo dmesg | tail -n 10
diff --git a/sys/contrib/openzfs/.github/workflows/scripts/qemu-2-start.sh b/sys/contrib/openzfs/.github/workflows/scripts/qemu-2-start.sh
index 9a18ca659c44..e63aece389c0 100755
--- a/sys/contrib/openzfs/.github/workflows/scripts/qemu-2-start.sh
+++ b/sys/contrib/openzfs/.github/workflows/scripts/qemu-2-start.sh
@@ -78,11 +78,6 @@ case "$OS" in
OPTS[0]="--boot"
OPTS[1]="uefi=on"
;;
- fedora41)
- OSNAME="Fedora 41"
- OSv="fedora-unknown"
- URL="https://download.fedoraproject.org/pub/fedora/linux/releases/41/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-41-1.4.x86_64.qcow2"
- ;;
fedora42)
OSNAME="Fedora 42"
OSv="fedora-unknown"
@@ -93,6 +88,11 @@ case "$OS" in
OSv="fedora-unknown"
URL="https://download.fedoraproject.org/pub/fedora/linux/releases/43/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2"
;;
+ fedora44)
+ OSNAME="Fedora 44"
+ OSv="fedora-unknown"
+ URL="https://download.fedoraproject.org/pub/fedora/linux/releases/44/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-44-1.7.x86_64.qcow2"
+ ;;
freebsd13-5r)
FreeBSD="13.5-RELEASE"
OSNAME="FreeBSD $FreeBSD"
@@ -101,13 +101,20 @@ case "$OS" in
KSRC="$FREEBSD_REL/../amd64/$FreeBSD/src.txz"
NIC="rtl8139"
;;
- freebsd14-3r)
- FreeBSD="14.3-RELEASE"
+ freebsd14-4r)
+ FreeBSD="14.4-RELEASE"
OSNAME="FreeBSD $FreeBSD"
OSv="freebsd14.0"
URLxz="$FREEBSD_REL/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI.raw.xz"
KSRC="$FREEBSD_REL/../amd64/$FreeBSD/src.txz"
;;
+ freebsd15-0r)
+ FreeBSD="15.0-RELEASE"
+ OSNAME="FreeBSD $FreeBSD"
+ OSv="freebsd15.0"
+ URLxz="$FREEBSD_REL/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI-ufs.raw.xz"
+ KSRC="$FREEBSD_REL/../amd64/$FreeBSD/src.txz"
+ ;;
freebsd13-5s)
FreeBSD="13.5-STABLE"
OSNAME="FreeBSD $FreeBSD"
@@ -116,15 +123,15 @@ case "$OS" in
KSRC="$FREEBSD_SNAP/../amd64/$FreeBSD/src.txz"
NIC="rtl8139"
;;
- freebsd14-3s)
- FreeBSD="14.3-STABLE"
+ freebsd14-4s)
+ FreeBSD="14.4-STABLE"
OSNAME="FreeBSD $FreeBSD"
OSv="freebsd14.0"
URLxz="$FREEBSD_SNAP/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI-ufs.raw.xz"
KSRC="$FREEBSD_SNAP/../amd64/$FreeBSD/src.txz"
;;
- freebsd15-0s)
- FreeBSD="15.0-STABLE"
+ freebsd15-1s)
+ FreeBSD="15.1-PRERELEASE"
OSNAME="FreeBSD $FreeBSD"
OSv="freebsd14.0"
URLxz="$FREEBSD_SNAP/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI-ufs.raw.xz"
@@ -193,17 +200,49 @@ DISK="/dev/zvol/zpool/openzfs"
sudo zfs create -ps -b 64k -V 80g zpool/openzfs
while true; do test -b $DISK && break; sleep 1; done
-# we are downloading via axel, curl and wget are mostly slower and
-# require more return value checking
+# We first try to download with 'axel', which is faster than curl, but fallback
+# to curl if that doesn't work. It is hoped that the curl fallback will get
+# around the occasional "ERROR 502: Bad Gateway" errors.
IMG="/mnt/tests/cloud-image"
-if [ ! -z "$URLxz" ]; then
- echo "Loading $URLxz ..."
- time axel -q -o "$IMG" "$URLxz"
- echo "Loading $KSRC ..."
- time axel -q -o ~/src.txz $KSRC
-else
- echo "Loading $URL ..."
- time axel -q -o "$IMG" "$URL"
+for cmd in 'axel -q -o' 'curl --fail -LSs -o' ; do
+ if [ ! -z "$URLxz" ]; then
+ echo "Loading $URLxz with $cmd..."
+ time eval "$cmd $IMG $URLxz" || true
+
+ if [ ! -s ~/src.txz ] ; then
+ echo "Loading $KSRC with $cmd..."
+ time eval "$cmd ~/src.txz $KSRC" || true
+ fi
+ else
+ echo "Loading $URL with $cmd..."
+ time eval "$cmd $IMG $URL" || true
+ fi
+
+ if [ -s "$IMG" ] ; then
+ # Successful download
+ break
+ fi
+done
+
+# SPECIAL CASE
+# FreeBSD sometimes has broken links in their "current/" URL. Go back up a
+# level and look for other images that might work. For example:
+#
+# https://download.freebsd.org/snapshots/CI-IMAGES/16.0-CURRENT/amd64/:
+#
+# 20251110/
+# 20251209/
+# 20260420/
+# current/
+#
+# In this case let's say the raw.xz link in current/ is bad, so look though the
+# other snapshot links for the newest existing raw.xz file.
+if [ ! -z "$URLxz" ] && [ ! -s "$IMG" ] ; then
+ URLxz=$(wget --accept "*.raw.xz" --spider -np --recursive --no-verbose \
+ $(dirname $(dirname $URLxz)) 2>&1 | awk '/200 OK/{print $(NF-2)}' | \
+ sort -n | tail -n 1)
+ echo "Couldn't download FreeBSD raw.xz. Trying fallback snapshot $URLxz"
+ curl --fail -LSs -o $IMG $URLxz
fi
echo "Importing VM image to zvol..."
diff --git a/sys/contrib/openzfs/.github/workflows/scripts/qemu-3-deps-vm.sh b/sys/contrib/openzfs/.github/workflows/scripts/qemu-3-deps-vm.sh
index c8e1a015abd9..6a83ef45fd26 100755
--- a/sys/contrib/openzfs/.github/workflows/scripts/qemu-3-deps-vm.sh
+++ b/sys/contrib/openzfs/.github/workflows/scripts/qemu-3-deps-vm.sh
@@ -3,8 +3,11 @@
######################################################################
# 3) install dependencies for compiling and loading
#
-# $1: OS name (like 'fedora41')
-# $2: (optional) Experimental Fedora kernel version, like "6.14" to
+# qemu-3-deps-vm.sh [--poweroff] OS_NAME [FEDORA_VERSION]
+#
+# --poweroff: Power off the VM after installing dependencies
+# OS_NAME: OS name (like 'fedora41')
+# FEDORA_VERSION: (optional) Experimental Fedora kernel version, like "6.14" to
# install instead of Fedora defaults.
######################################################################
@@ -153,6 +156,12 @@ function install_fedora_experimental_kernel {
sudo dnf -y copr disable @kernel-vanilla/mainline
}
+POWEROFF=""
+if [ "$1" == "--poweroff" ] ; then
+ POWEROFF=1
+ shift
+fi
+
# Install dependencies
case "$1" in
almalinux8)
@@ -212,6 +221,11 @@ case "$1" in
sudo apt-get install -yq linux-tools-common libtirpc-dev \
linux-modules-extra-$(uname -r)
sudo apt-get install -yq dh-sequence-dkms
+
+ # Need 'build-essential' explicitly for ARM builder
+ # https://github.com/actions/runner-images/issues/9946
+ sudo apt-get install -yq build-essential
+
echo "##[endgroup]"
echo "##[group]Delete Ubuntu OpenZFS modules"
for i in $(find /lib/modules -name zfs -type d); do sudo rm -rvf $i; done
@@ -306,5 +320,7 @@ esac
# reset cloud-init configuration and poweroff
sudo cloud-init clean --logs
-sleep 2 && sudo poweroff &
+if [ "$POWEROFF" == "1" ] ; then
+ sleep 2 && sudo poweroff &
+fi
exit 0
diff --git a/sys/contrib/openzfs/.github/workflows/scripts/qemu-4-build-vm.sh b/sys/contrib/openzfs/.github/workflows/scripts/qemu-4-build-vm.sh
index 38255cf39966..bbfa2ec85b8f 100755
--- a/sys/contrib/openzfs/.github/workflows/scripts/qemu-4-build-vm.sh
+++ b/sys/contrib/openzfs/.github/workflows/scripts/qemu-4-build-vm.sh
@@ -350,7 +350,16 @@ fi
# save some sysinfo
uname -a > /var/tmp/uname.txt
-cd $HOME/zfs
+# Check if we're running this script from within a VM or on the runner itself.
+# Most of the time we will be running in a VM, but the ARM builder actually
+# runs this script on the runner. If we happen to be running on the ARM
+# runner, we will start in the ZFS source directory. If we're running on a VM
+# then we'll just start in our home directory, and will need to 'cd' into our
+# source directory.
+if [ ! -e META ] ; then
+ cd $HOME/zfs
+fi
+
export PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin"
extra=""
diff --git a/sys/contrib/openzfs/.github/workflows/scripts/qemu-6-tests.sh b/sys/contrib/openzfs/.github/workflows/scripts/qemu-6-tests.sh
index 8dad30fe4a5a..c261cbfca06d 100755
--- a/sys/contrib/openzfs/.github/workflows/scripts/qemu-6-tests.sh
+++ b/sys/contrib/openzfs/.github/workflows/scripts/qemu-6-tests.sh
@@ -222,9 +222,9 @@ TAGS=$NUM/$DEN
sudo dmesg -c > dmesg-prerun.txt
mount > mount.txt
df -h > df-prerun.txt
-$TDIR/zfs-tests.sh -vKO -s 3GB -T $TAGS
+RV=0
+$TDIR/zfs-tests.sh -vKO -s 3GB -T $TAGS || RV=$?
-RV=$?
df -h > df-postrun.txt
echo $RV > tests-exitcode.txt
sync
diff --git a/sys/contrib/openzfs/.github/workflows/scripts/qemu-7-prepare.sh b/sys/contrib/openzfs/.github/workflows/scripts/qemu-7-prepare.sh
index 98a5c24c2521..51ae82567c2c 100755
--- a/sys/contrib/openzfs/.github/workflows/scripts/qemu-7-prepare.sh
+++ b/sys/contrib/openzfs/.github/workflows/scripts/qemu-7-prepare.sh
@@ -13,16 +13,29 @@ source env.txt
mkdir -p $RESPATH
+TARNAME=qemu-$OS
+
# check if building the module has failed
if [ -z ${VMs:-} ]; then
cd $RESPATH
echo ":exclamation: ZFS module didn't build successfully :exclamation:" \
| tee summary.txt | tee /tmp/summary.txt
cp /var/tmp/*.txt .
- tar cf /tmp/qemu-$OS.tar -C $RESPATH -h . || true
+
+ # rename /var/tmp/test_results to /var/tmp/qemu-$OS
+ mv $RESPATH $(dirname $RESPATH)/$TARNAME
+ tar cjf /tmp/$TARNAME.tar.bz2 -C $(dirname $RESPATH) -h $TARNAME || true
+ # move it back to /var/tmp/test_results (needed for next script)
+ mv $(dirname $RESPATH)/$TARNAME $RESPATH
+
exit 0
fi
+if ! grep -q vm /etc/hosts ; then
+ echo "No vm* hostnames, VMs probably didn't startup"
+ exit 0
+fi
+
# build was okay
BASE="$HOME/work/zfs/zfs"
MERGE="$BASE/.github/workflows/scripts/merge_summary.awk"
@@ -38,6 +51,11 @@ cd $RESPATH
# prepare result files for summary
for ((i=1; i<=VMs; i++)); do
+
+ # no results, VM either didn't start or was unreachable, create
+ # the missing directory which is expected by subsequent steps
+ test -d vm$i || mkdir -p vm$i
+
file="vm$i/build-stderr.txt"
test -s $file && mv -f $file build-stderr.txt
@@ -48,12 +66,14 @@ for ((i=1; i<=VMs; i++)); do
test -s $file && mv -f $file uname.txt
file="vm$i/tests-exitcode.txt"
- if [ ! -s $file ]; then
- # XXX - add some tests for kernel panic's here
- # tail -n 80 vm$i/console.txt | grep XYZ
- echo 1 > $file
+ if [ ! -s "$file" ]; then
+ # Print in bold red
+ echo -e "\033[1;31mVM$i didn't finish ZTS and may have crashed!\033[0m" >> extra
+
+ # ENOENT=2
+ echo 2 > "$file"
fi
- rv=$(cat vm$i/tests-exitcode.txt)
+ rv=$(cat "$file")
test $rv != 0 && touch /tmp/have_failed_tests
file="vm$i/current/log"
@@ -76,6 +96,14 @@ done
if [ -s summary ]; then
$MERGE summary | grep -v '^/' > summary.txt
$MERGE summary | $BASE/scripts/zfs-tests-color.sh > /tmp/summary.txt
+
+ # Add in additional 'extra' text at the end, if file is present.
+ if [ -s extra ] ; then
+ echo "" >> /tmp/summary.txt
+ cat extra >> /tmp/summary.txt
+ rm -f extra
+ fi
+
rm -f summary
else
touch summary.txt /tmp/summary.txt
@@ -121,4 +149,9 @@ if [ ! -s uname.txt ]; then
fi
# artifact ready now
-tar cf /tmp/qemu-$OS.tar -C $RESPATH -h . || true
+#
+# rename /var/tmp/test_results to /var/tmp/qemu-$OS
+mv $RESPATH $(dirname $RESPATH)/$TARNAME
+tar cjf /tmp/$TARNAME.tar.bz2 -C $(dirname $RESPATH) -h $TARNAME || true
+# move it back to /var/tmp/test_results (needed for next script)
+mv $(dirname $RESPATH)/$TARNAME $RESPATH
diff --git a/sys/contrib/openzfs/.github/workflows/scripts/qemu-8-summary.sh b/sys/contrib/openzfs/.github/workflows/scripts/qemu-8-summary.sh
index 00a4bf1ae325..39b3d124c794 100755
--- a/sys/contrib/openzfs/.github/workflows/scripts/qemu-8-summary.sh
+++ b/sys/contrib/openzfs/.github/workflows/scripts/qemu-8-summary.sh
@@ -37,9 +37,11 @@ function showfile_tail() {
echo "##[endgroup]"
}
-# overview
-cat /tmp/summary.txt
-echo ""
+# overview if available
+if [ -f /tmp/summary.txt -a -s /tmp/summary.txt ]; then
+ cat /tmp/summary.txt
+ echo ""
+fi
if [ -f /tmp/have_failed_tests -a -s /tmp/failed.txt ]; then
echo "Debuginfo of failed tests:"
diff --git a/sys/contrib/openzfs/.github/workflows/scripts/qemu-9-summary-page.sh b/sys/contrib/openzfs/.github/workflows/scripts/qemu-9-summary-page.sh
index 737dda01b565..1200f4de2b94 100755
--- a/sys/contrib/openzfs/.github/workflows/scripts/qemu-9-summary-page.sh
+++ b/sys/contrib/openzfs/.github/workflows/scripts/qemu-9-summary-page.sh
@@ -33,7 +33,9 @@ function send2github() {
# first call, generate all summaries
if [ ! -f out-1.md ]; then
logfile="1"
- for tarfile in Logs-functional-*/qemu-*.tar; do
+ # The bz2 files are put into directories with the same name, like:
+ # "qemu-debian12.tar.bz2/qemu-debian12.tar.bz2"
+ for tarfile in qemu-*.tar.bz2/qemu-*.tar.bz2; do
rm -rf vm* *.txt
if [ ! -s "$tarfile" ]; then
output "\n## Functional Tests: unknown\n"
diff --git a/sys/contrib/openzfs/.github/workflows/smatch.yml b/sys/contrib/openzfs/.github/workflows/smatch.yml
index ac6454244f93..305a1f0179bd 100644
--- a/sys/contrib/openzfs/.github/workflows/smatch.yml
+++ b/sys/contrib/openzfs/.github/workflows/smatch.yml
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Checkout smatch
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
repository: error27/smatch
ref: master
@@ -26,7 +26,7 @@ jobs:
cd $GITHUB_WORKSPACE/smatch
make -j$(nproc)
- name: Checkout OpenZFS
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha }}
*** 7802 LINES SKIPPED ***