From nobody Fri May 15 00:00:52 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gGnQz0mmJz5w4Ys for ; Fri, 15 May 2026 00:00:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gGnQy5263z3tNx for ; Fri, 15 May 2026 00:00:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1778803258; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VqhXZ1EFvVZb+F8ZstLjUkv6te2Es62zfMFHbjzKAIY=; b=RzL0u6rb+O/0hr9fJLEL6/8eVjLQsnGNbGNg7Tc0Qw4YJflNefj9Au0amXrkIIjmtAYY5e 8arRD2pcEUcT3oLeB3XlSEN0mTD24Swtx3Dif5XSKeQB26yhd7mDlnwW2u0h5t9+oX+BFH Ox1l3ZuQsHEY8DcMuvy7Omw/Sx5mma2mXfexepRdk9zH9+4bs8ILmM+PvtvIJa0ZYr4yPo obhIc+AdyTiDERc3KM7HRcsuYNzvLn2wNwWsA0u5RgmWQuZkD2+6s/wkaKY4SfNoObjHQA +WjLbCHZ32FHNQI6wHzCkxlcIhHV7YUNISY02DnIlh7e1cQpGD+o3I3HJMfJxA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1778803258; a=rsa-sha256; cv=none; b=g20eh0BB/15lVafQAwl/1KYFeKPsIRkF0DcuqXwCyXNiZXbUn4yWk+hGifFMJMq82MhNBa 9rqo1rGWTNlh/jaY7S77ZLOKE3cX/n5T2601o6w+DojJenl0U5r7bc67rZDGUzFc6Wm7qe NCHCSwFl5nEbnOhW12nV/ogRfeEmZtMccm17ARfh4ceyEmI+7XUZp+xx0V/oGtqE0JM1gi y9tGr3CNd47P8HIEA/ZXRbgjLBsaDK41ZEKTpPmvs+qw+hcnV6BCkB+QOVm2zziyd4nygt mh0xL3S0w85isluoSvtCywqeGk4Wji8kCoQbWypgTZjvjvqJZQ82q871ErBq9g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1778803258; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VqhXZ1EFvVZb+F8ZstLjUkv6te2Es62zfMFHbjzKAIY=; b=qnh1+doUgJUVOIijvt+NPPdyh3kzFQscytv+N/zUQYyNGrWLGzaZZsG0PieHs+Nn6khVeu QEOXfmAiLHACthaRwAwuC6R5ttjneuQ9rhPRQCLeStQyQdd20cad/hBESaC7kVAVEx0Edp SYD8k6mg28MfWxPiD4mInobBV0U+lz+niam805KkogMlTpv6y1yomrmtDe525L5qxbKJzO BkrK/JmMKIgKtaWySuE9OlO7l7z0UxkYtn4SG0rzVtpmybRQbAQ0CX46T8bTndC/7NRyoY 2CD5kK+C47FlbXxPG6BoEzfgRm1gi1nT5owzHqMksYphRPda3XI3t7JoStY0qw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gGnQy1MhszyfW for ; Fri, 15 May 2026 00:00:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1d57e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 15 May 2026 00:00:52 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Martin Matuska From: Colin Percival Subject: git: 409247a6cbd1 - releng/15.1 - zfs: merge openzfs/zfs@6330a45b0 (zfs-2.4-release) into stable/15 List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: cperciva X-Git-Repository: src X-Git-Refname: refs/heads/releng/15.1 X-Git-Reftype: branch X-Git-Commit: 409247a6cbd11e3510025e025f3b82184c3de17c Auto-Submitted: auto-generated Date: Fri, 15 May 2026 00:00:52 +0000 Message-Id: <6a066234.1d57e.6807ba65@gitrepo.freebsd.org> The branch releng/15.1 has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=409247a6cbd11e3510025e025f3b82184c3de17c commit 409247a6cbd11e3510025e025f3b82184c3de17c Author: Martin Matuska AuthorDate: 2026-05-13 19:53:01 +0000 Commit: Colin Percival 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: " " 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 " 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 ***