OpenZFS/src 1051c3dscripts spdxcheck.pl

spdxcheck: enforce SPDX license tags on build system files

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Tony Hutter <hutter2 at llnl.gov>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18077
DeltaFile
+17-8scripts/spdxcheck.pl
+17-81 files

OpenZFS/src 85391eeconfig Rules.am Shellcheck.am

build: add SPDX license tags to build system files

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Tony Hutter <hutter2 at llnl.gov>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18077
DeltaFile
+1-0config/Rules.am
+1-0config/Shellcheck.am
+1-0config/Substfiles.am
+1-0config/always-arch.m4
+1-0config/always-compiler-options.m4
+1-0config/always-cppcheck.m4
+6-0206 files not shown
+212-0212 files

OpenZFS/src aca58dbmodule/os/linux/zfs zpl_export.c

Add fh_to_parent export definition

This commit adds support for converting a file handle to its
parent dentry. This is called in exportfs_decode_fh_raw()
when subtree checking is enabled in NFS. Defining this and
handling the expanded filehandles allows the knfsd to succeed
in handling the file handle where it might otherwise fail
with ESTALE when trying to open by filehandle.

A side effect of this change is that name_to_handle_at(2)
and open_by_handle_at(2) now support AT_HANDLE_CONNECTABLE.

Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Reviewed-by: Ameer Hamza <ahamza at ixsystems.com>
Signed-off-by: Andrew Walker <andrew.walker at truenas.com>
Closes #18099
DeltaFile
+82-7module/os/linux/zfs/zpl_export.c
+82-71 files

OpenZFS/src f2b4ed3module/os/linux/spl spl-trace.c

spl: remove a _KERNEL check

This code is only compiled for the Linux kernel module, so that define
is always set.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18117
DeltaFile
+0-2module/os/linux/spl/spl-trace.c
+0-21 files

OpenZFS/src 02a6311module/os/linux/spl spl-kstat.c

spl: unexport kstat_proc_entry functions

These are used to implement the kstat and procfs_list interfaces, and
aren't used from outside. There's no need to export them.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18117
DeltaFile
+0-3module/os/linux/spl/spl-kstat.c
+0-31 files

OpenZFS/src 662f33fmodule Kbuild.in, module/os/linux/spl spl-math-compat.c spl-generic.c

spl: lift 64-bit math compat out to separate file

It's a lot of rarely-compiled code, so move it to the side to make other
code easier to read.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18117
DeltaFile
+275-0module/os/linux/spl/spl-math-compat.c
+0-258module/os/linux/spl/spl-generic.c
+8-0module/Kbuild.in
+283-2583 files

OpenZFS/src 2ca6e88module Kbuild.in, module/os/linux/spl spl-atomic.c

spl: remove old atomic lock

Long ago, SPL atomics were implemented as a global spinlock over
conventional operations. In 5e9b5d832b (2009-10) they was converted to
proper atomics, with the spinlock retained as a fallback.

The switch to compile with the fallback was later removed in a91258913f
(2018-05), but the code it enabled wasn't. So lets do that.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18117
DeltaFile
+0-36module/os/linux/spl/spl-atomic.c
+0-1module/Kbuild.in
+0-372 files

OpenZFS/src 2f1f252module/icp/asm-x86_64/modes ghash-x86_64.S aesni-gcm-avx2-vaes.S

icp: emit .note.GNU-stack section for all ELF targets

On FreeBSD, linking the zfs kernel module with binutils ld 2.44 shows
the following warning:

    ld: warning: aesni-gcm-avx2-vaes.o: missing .note.GNU-stack section
    implies executable stack
    ld: NOTE: This behaviour is deprecated and will be removed in a
    future version of the linker

Some of the `.S` files under `module/icp/asm-x86_64/modes` check whether
to emit the `.note.GNU-stack` section using:

    #if defined(__linux__) && defined(__ELF__)

We could add `&& defined(__FreeBSD__)` to the test, but since all other
`.S` files in the OpenZFS tree use:

    #ifdef __ELF__

    [6 lines not shown]
DeltaFile
+1-1module/icp/asm-x86_64/modes/ghash-x86_64.S
+1-1module/icp/asm-x86_64/modes/aesni-gcm-avx2-vaes.S
+1-1module/icp/asm-x86_64/modes/aesni-gcm-x86_64.S
+3-33 files

OpenZFS/src 794f158module/zfs dmu_recv.c, tests/runfiles common.run

When receiving a stream with the large block flag, activate feature

ZFS send streams include a feature flag DMU_BACKUP_FEATURE_LARGE_BLOCKS
to indicate the presence of large blocks in the dataset. On the sending
side, this flag is included if the `-L` flag is passed to `zfs send`
and the feature is active in the dataset. On the receive side, the
stream is refused if the feature is active in the destination dataset
but the stream does not include the feature flag.

The problem is the feature is only activated when a large block is
born. If a large block has been born in the destination, but never
the source, the send can't work. This can arise when sending streams
back and forth between two datasets.

This commit fixes the problem by always activating the large blocks
feature when receiving a stream with the large block feature flag.

Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Signed-off-by: Austin Wise <AustinWise at gmail.com>
Closes #18105
DeltaFile
+86-0tests/zfs-tests/tests/functional/rsend/send_large_blocks_initial.ksh
+83-0tests/zfs-tests/tests/functional/rsend/send_large_blocks_incremental.ksh
+16-0module/zfs/dmu_recv.c
+2-0tests/zfs-tests/tests/Makefile.am
+1-0tests/runfiles/common.run
+188-05 files

OpenZFS/src 2301755module/os/freebsd/zfs zfs_vnops_os.c, module/os/linux/zfs zfs_vnops_os.c

Fix zfs_open() to skip zil_async_to_sync() for the snapshot

Fix zfs_open() to skip zil_async_to_sync() for the snapshot, as it won't
have any transactions. zfsvfs->z_log is NULL for the snapshot.

Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Signed-off-by: Jitendra Patidar <jitendra.patidar at nutanix.com>
Closes #18091
DeltaFile
+3-2module/os/freebsd/zfs/zfs_vnops_os.c
+3-2module/os/linux/zfs/zfs_vnops_os.c
+6-42 files

OpenZFS/src c77f17blib/libzfs libzfs_dataset.c, man/man7 zfsprops.7

Add snapshots_changed_nsecs dataset property

Add a read-only dataset property, snapshots_changed_nsecs, which 
exposes the nanosecond resolution version of snapshots_changed.

Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Signed-off-by: Wolfgang Hoschek <wolfgang.hoschek at mac.com>
Closes #17998
Closes #18031
DeltaFile
+43-9tests/zfs-tests/tests/functional/snapshot/snapshot_018_pos.ksh
+13-0lib/libzfs/libzfs_dataset.c
+9-0man/man7/zfsprops.7
+7-1module/zfs/dsl_dataset.c
+8-0module/zfs/zcp_get.c
+6-0module/zcommon/zfs_prop.c
+86-102 files not shown
+89-118 files

OpenZFS/src 6eef5cdtests/runfiles common.run, tests/zfs-tests/tests Makefile.am

ZTS: add regression test for #17180

In #17180, we fixed an interesting bug that i believe i hit in one of my
pools, but as far as i can tell, there was no test for it.

this patch adds a regression test for #17180, minimised from my attempts
to reproduce the bug in a way that resembled the history of my pool.

Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Adam Moss <c at yotes.com>
Signed-off-by: delan azabani <dazabani at igalia.com>
Closes #18109
DeltaFile
+61-0tests/zfs-tests/tests/functional/block_cloning/block_cloning_after_device_removal.ksh
+2-1tests/runfiles/common.run
+1-0tests/zfs-tests/tests/Makefile.am
+64-13 files

OpenZFS/src 2dbd6afinclude/os/freebsd/spl/sys cmn_err.h kmem.h, include/sys spa.h zfs_debug.h

Rename several printf attributes declarations to __printf__

For kernel builds on FreeBSD, we redefine `__printf__` to
`__freebsd_kprintf__`, to support FreeBSD kernel printf(9) extensions
with clang.

In OpenZFS various printf related functions are declared with
`__attribute__((format(printf, X, Y)))`, so these won't work with the
above redefinition. With clang 21 and higher, this leads to errors
similar to:

    sys/contrib/openzfs/module/zfs/spa_misc.c:414:38: error: passing
    'printf' format string where 'freebsd_kprintf' format string is
    expected [-Werror,-Wformat]
      414 |         (void) vsnprintf(buf, sizeof (buf), fmt, adx);
          |                                             ^

Since attribute names can always be spelled with leading and trailing
double underscores, rename these instances.

    [7 lines not shown]
DeltaFile
+8-8include/os/freebsd/spl/sys/cmn_err.h
+2-2include/sys/spa.h
+2-2include/os/freebsd/spl/sys/kmem.h
+1-1include/sys/zfs_debug.h
+1-1include/sys/vdev.h
+14-145 files

OpenZFS/src 312bdabmodule/os/linux/zfs zpl_inode.c zfs_vnops_os.c

Add handling for STATX_CHANGE_COOKIE

This commit adds handling for the STATX_CHANGE_COOKIE so that
we can properly surface the ZFS znode sequence to NFS clients via
knfsd.

If knfsd does not have STATX_CHANGE_COOKIE in statx result then
it will synthesize the NFS change_info4 structure and related
change4id values algorithmically based on the ctime value of the
file. Since internally ZFS is using ktime_get_coarse_real_ts64()
for the timestamp calculation here it introduces the possiblity
that the change will not increment the change4id of directories
/ files causing a failure in the client to invalidate its attr
cache (among other things). See RFC 8881 Section 10.8 for
discussion of how clients may implement name and directory
caching.

Notable in this commit is that we are not initializing the
inode->i_version to the znode->z_seq number. The reason for this

    [27 lines not shown]
DeltaFile
+26-0module/os/linux/zfs/zpl_inode.c
+12-1module/os/linux/zfs/zfs_vnops_os.c
+38-12 files

OpenZFS/src a1319bfmodule/os/linux/spl spl-kmem-cache.c

kmem: don't add __GFP_RECLAIMABLE for KM_VMEM allocations

vmalloc()'d memory is not movable/reclaimable, so __GFP_RECLAIMABLE is
not a valid flag, and since 6.19 the kernel warns if you use it.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18107
DeltaFile
+1-3module/os/linux/spl/spl-kmem-cache.c
+1-31 files

OpenZFS/src dbb3f24cmd/zfs zfs_main.c, man/man8 zfs-clone.8

cmd/zfs: clone: accept `-u` to not mount newly created datasets

Signed-off-by: Ivan Shapovalov <intelfx at intelfx.name>
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Tony Hutter <hutter2 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Closes #18080
DeltaFile
+37-29cmd/zfs/zfs_main.c
+66-0tests/zfs-tests/tests/functional/cli_root/zfs_clone/zfs_clone_nomount.ksh
+3-1man/man8/zfs-clone.8
+1-1tests/runfiles/common.run
+1-0tests/zfs-tests/tests/Makefile.am
+108-315 files

OpenZFS/src b9b8444.github/workflows zfs-qemu.yml, .github/workflows/scripts qemu-2-start.sh qemu-3-deps-vm.sh

CI: Add Alpine Linux 3.23 runner to the pipeline (#18087)

Add an Alpine Linux 3.23 runner to the CI chain to run OpenZFS builds
and tests against musl libc.

Currently, zfs_send_sparse is killed after 10 minutes on Alpine, causing
cascading EBUSY failures in the test suite. With zfs_send_sparse
disabled, the ZFS test suite reaches a pass rate of 94.62%.

This commit introduces the required Alpine-specific setup and a small
set of shell and cloud-init compatibility fixes that also apply to
existing Linux runners.

The Alpine runner is not enabled by default and is not executed for new
pull requests.

Sponsored-by: ERNW Research GmbH - https://ernw-research.de/

Signed-off-by: Alexander Moch <amoch at ernw.de>

    [2 lines not shown]
DeltaFile
+41-7.github/workflows/scripts/qemu-2-start.sh
+44-1.github/workflows/scripts/qemu-3-deps-vm.sh
+15-7.github/workflows/scripts/qemu-5-setup.sh
+8-1.github/workflows/scripts/qemu-6-tests.sh
+8-0.github/workflows/zfs-qemu.yml
+2-1tests/zfs-tests/tests/functional/mount/mount_loopback.ksh
+118-173 files not shown
+121-209 files

OpenZFS/src e72f305cmd ztest.c

cmd/ztest: avoid `PATH_MAX` stack allocation in `ztest_get_zdb_bin()` (#18085)

Calling realpath(path, buf) can trigger fortified header wrappers that
allocate a PATH_MAX-sized temporary buffer on the stack, exceeding the
4 KiB frame limit on some systems. Use the heap-allocating
realpath(path, NULL) form instead.

Sponsored-by: ERNW Research GmbH - https://ernw-research.de/

Signed-off-by: Alexander Moch <amoch at ernw.de>
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Tony Hutter <hutter2 at llnl.gov>
DeltaFile
+6-1cmd/ztest.c
+6-11 files

OpenZFS/src f041375include/os/linux/spl/sys kmem.h, module/os/linux/spl spl-kmem-cache.c

kmem: don't add __GFP_COMP for KM_VMEM allocations

It hasn't been necessary since Linux 3.13
(torvalds/linux at a57a49887eb33), and since 6.19 the kernel warns if you
use it.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Tony Hutter <hutter2 at llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18053
DeltaFile
+4-1include/os/linux/spl/sys/kmem.h
+1-1module/os/linux/spl/spl-kmem-cache.c
+5-22 files

OpenZFS/src f95e306module/os/linux/spl spl-kmem.c spl-kmem-cache.c

kmem: don't pass __GFP_HIGHMEM to __vmalloc

Since Linux 4.12 (torvalds/linux at 19809c2da28ae) __GFP_HIGHMEM has been
automatically added to calls to __vmalloc() internally, so we don't need
it anymore. This is good, because since 6.19 the kernel warns if you use
__GFP_HIGHMEM.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Tony Hutter <hutter2 at llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18053
DeltaFile
+2-2module/os/linux/spl/spl-kmem.c
+1-1module/os/linux/spl/spl-kmem-cache.c
+3-32 files

OpenZFS/src 3c8665cconfig kernel-inode-state.m4 kernel.m4, include/os/linux/kernel/linux vfs_compat.h

Linux 6.19: replace i_state access with inode_state_read_once()

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Tony Hutter <hutter2 at llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18053
DeltaFile
+23-0config/kernel-inode-state.m4
+8-0include/os/linux/kernel/linux/vfs_compat.h
+2-1module/os/linux/zfs/zfs_vnops_os.c
+2-0config/kernel.m4
+35-14 files

OpenZFS/src 3c41933cmd/zed/zed.d history_event-zfs-list-cacher.sh.in, contrib/dracut/90zfs mount-zfs.sh.in

zed.d, contrib: fix shellcheck errors in scripts

Not sure why this was not caught by CI; perhaps my shellcheck is new
enough to catch more things.

Signed-off-by: Ivan Shapovalov <intelfx at intelfx.name>
DeltaFile
+1-1contrib/dracut/90zfs/mount-zfs.sh.in
+1-0cmd/zed/zed.d/history_event-zfs-list-cacher.sh.in
+2-12 files

OpenZFS/src 1e7280ccmd/zfs zfs_main.c

zfs_main: cosmetic: add missing flag to the comment for create

Signed-off-by: Ivan Shapovalov <intelfx at intelfx.name>
DeltaFile
+1-1cmd/zfs/zfs_main.c
+1-11 files

OpenZFS/src e28d980man/man8 zfs-create.8 zfs-rename.8

man: cosmetic: fix typos; use consistent spelling for "non-existing"

Signed-off-by: Ivan Shapovalov <intelfx at intelfx.name>
DeltaFile
+1-1man/man8/zfs-create.8
+1-1man/man8/zfs-rename.8
+2-22 files

OpenZFS/src 9880ac3module/zcommon zfs_prop.c

zvol: cosmetic: fix up `volthreading` property short name

Signed-off-by: Ivan Shapovalov <intelfx at intelfx.name>
DeltaFile
+2-2module/zcommon/zfs_prop.c
+2-21 files

OpenZFS/src 654e762lib/libzpool Makefile.am, module Kbuild.in Makefile.bsd

u8_textprep: move into module/zfs

Now that it's built into the main zfs module in all cases, there's no
reason to put it in its own dir.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18071
DeltaFile
+2,171-0module/zfs/u8_textprep.c
+0-2,171module/unicode/u8_textprep.c
+1-6module/Kbuild.in
+1-3module/Makefile.bsd
+1-2lib/libzpool/Makefile.am
+2,174-2,1825 files

OpenZFS/src 309006alib Makefile.am, lib/libunicode Makefile.am

libunicode: merge into libzpool

It's a single source file that is not used anywhere else, so there's no
reason to keep it separate.

Sponsored-by: https://despairlabs.com/sponsor/
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Rob Norris <robn at despairlabs.com>
Closes #18071
DeltaFile
+0-6lib/libunicode/Makefile.am
+2-1lib/libzpool/Makefile.am
+0-1lib/Makefile.am
+2-83 files

OpenZFS/src 648a9a2.github/workflows zfs-qemu-packages.yml, .github/workflows/scripts qemu-test-repo-vm.sh

CI: Test 2.4.x in qemu-test-repo-vm.sh, quick mode

The qemu-test-repo-vm.sh script tests installs ZFS from different
repos.  Have it test from the new 2.4.x repos as well.

Also add a checkbox to run in "lookup mode".  This just does a
quick lookup to see what version is installed in each repo.  It does
not do a test install and module load.  It only takes 3min to run vs
over an hour for the full version.

Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Tino Reichardt <milky-zfs at mcmilk.de>
Signed-off-by: Tony Hutter <hutter2 at llnl.gov>
Closes #18070
DeltaFile
+23-4.github/workflows/scripts/qemu-test-repo-vm.sh
+12-1.github/workflows/zfs-qemu-packages.yml
+35-52 files

OpenZFS/src af9ae62tests/zfs-tests/tests/functional/raidz raidz_001_neg.ksh

ZFS: Enable more logs for raidz_001_neg

The output is not so big here, so lets collect something useful.

Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Rob Norris <robn at despairlabs.com>
Signed-off-by: Alexander Motin <alexander.motin at TrueNAS.com>
Closes #17977
DeltaFile
+1-1tests/zfs-tests/tests/functional/raidz/raidz_001_neg.ksh
+1-11 files

OpenZFS/src e3fe429.github/workflows zfs-qemu-packages.yml, .github/workflows/scripts qemu-test-repo-vm.sh

CI: zfs-test-packages: Add in new repos

Test install from our new repos: zfs-latest, zfs-legacy,
zfs-2.3, zfs-2.2, from the zfs-test-packages workflow.
This on-demand workflow is use to verify that the zfs RPMs
in the repos are correct.

Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Tony Hutter <hutter2 at llnl.gov>
Closes #17956
DeltaFile
+12-6.github/workflows/scripts/qemu-test-repo-vm.sh
+1-1.github/workflows/zfs-qemu-packages.yml
+13-72 files