From a3a2282bb1848079737b425fb78b365ead78e19e Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Tue, 23 Jul 2024 10:20:46 -0400 Subject: [PATCH] Testing 16382 --- .github/workflows/scripts/qemu-6-tests.sh | 2 +- .github/workflows/zfs-qemu.yml | 4 +- module/os/freebsd/zfs/zfs_vnops_os.c | 7 -- tests/runfiles/common.run | 3 +- tests/test-runner/bin/zts-report.py.in | 2 + tests/zfs-tests/include/tunables.cfg | 4 +- tests/zfs-tests/tests/Makefile.am | 1 + .../block_cloning_rlimit_fsize.ksh | 64 +++++++++++++++++++ 8 files changed, 74 insertions(+), 13 deletions(-) create mode 100755 tests/zfs-tests/tests/functional/block_cloning/block_cloning_rlimit_fsize.ksh diff --git a/.github/workflows/scripts/qemu-6-tests.sh b/.github/workflows/scripts/qemu-6-tests.sh index e014a0e4f995..690632717369 100755 --- a/.github/workflows/scripts/qemu-6-tests.sh +++ b/.github/workflows/scripts/qemu-6-tests.sh @@ -77,7 +77,7 @@ uname -a > uname.txt TAGS=$2/$3 # TAGS=zpool_status,raidz -# TAGS=raidz +TAGS=block_cloning # run functional testings $TDIR/zfs-tests.sh -vK -s 3G -T $TAGS diff --git a/.github/workflows/zfs-qemu.yml b/.github/workflows/zfs-qemu.yml index 1ca3abe23c78..170b6b7a1b0c 100644 --- a/.github/workflows/zfs-qemu.yml +++ b/.github/workflows/zfs-qemu.yml @@ -17,9 +17,9 @@ jobs: # openzfs: # os: [almalinux8, almalinux9, centos-stream9, fedora39, fedora40, freebsd13, freebsd13r, freebsd14, freebsd14r, freebsd15, ubuntu20, ubuntu22, ubuntu24] # freebsd: - os: [almalinux8, almalinux9, fedora39, fedora40, freebsd13, freebsd14, freebsd15, ubuntu20, ubuntu22, ubuntu24] + # os: [almalinux8, almalinux9, fedora39, fedora40, freebsd13, freebsd14, freebsd15, ubuntu20, ubuntu22, ubuntu24] - # os: [freebsd13, freebsd13r, freebsd14, freebsd14r, freebsd15] + os: [freebsd13, freebsd14, freebsd15] runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 diff --git a/module/os/freebsd/zfs/zfs_vnops_os.c b/module/os/freebsd/zfs/zfs_vnops_os.c index fd36dbd30037..283f56963170 100644 --- a/module/os/freebsd/zfs/zfs_vnops_os.c +++ b/module/os/freebsd/zfs/zfs_vnops_os.c @@ -6072,7 +6072,6 @@ zfs_freebsd_copy_file_range(struct vop_copy_file_range_args *ap) struct vnode *invp = ap->a_invp; struct vnode *outvp = ap->a_outvp; struct mount *mp; - struct uio io; int error; uint64_t len = *ap->a_lenp; @@ -6120,12 +6119,6 @@ zfs_freebsd_copy_file_range(struct vop_copy_file_range_args *ap) goto out_locked; #endif - io.uio_offset = *ap->a_outoffp; - io.uio_resid = *ap->a_lenp; - error = vn_rlimit_fsize(outvp, &io, ap->a_fsizetd); - if (error != 0) - goto out_locked; - error = zfs_clone_range(VTOZ(invp), ap->a_inoffp, VTOZ(outvp), ap->a_outoffp, &len, ap->a_outcred); if (error == EXDEV || error == EAGAIN || error == EINVAL || diff --git a/tests/runfiles/common.run b/tests/runfiles/common.run index 51a38d70bc66..a98f0070b7fe 100644 --- a/tests/runfiles/common.run +++ b/tests/runfiles/common.run @@ -81,7 +81,8 @@ tests = ['block_cloning_clone_mmap_cached', 'block_cloning_cross_enc_dataset', 'block_cloning_copyfilerange_fallback_same_txg', 'block_cloning_replay', 'block_cloning_replay_encrypted', - 'block_cloning_lwb_buffer_overflow', 'block_cloning_clone_mmap_write'] + 'block_cloning_lwb_buffer_overflow', 'block_cloning_clone_mmap_write', + 'block_cloning_rlimit_fsize'] tags = ['functional', 'block_cloning'] [tests/functional/bootfs] diff --git a/tests/test-runner/bin/zts-report.py.in b/tests/test-runner/bin/zts-report.py.in index 8c0a89804f0a..f45c0e932609 100755 --- a/tests/test-runner/bin/zts-report.py.in +++ b/tests/test-runner/bin/zts-report.py.in @@ -331,6 +331,8 @@ elif sys.platform.startswith('linux'): ['SKIP', cfr_reason], 'block_cloning/block_cloning_replay_encrypted': ['SKIP', cfr_reason], + 'block_cloning/block_cloning_rlimit_fsize': + ['SKIP', cfr_reason], 'cli_root/zfs_rename/zfs_rename_002_pos': ['FAIL', known_reason], 'cli_root/zpool_reopen/zpool_reopen_003_pos': ['FAIL', known_reason], 'cp_files/cp_files_002_pos': ['SKIP', cfr_reason], diff --git a/tests/zfs-tests/include/tunables.cfg b/tests/zfs-tests/include/tunables.cfg index b4d7c4f72bab..bce49bfa5b05 100644 --- a/tests/zfs-tests/include/tunables.cfg +++ b/tests/zfs-tests/include/tunables.cfg @@ -95,8 +95,8 @@ VOL_INHIBIT_DEV UNSUPPORTED zvol_inhibit_dev VOL_MODE vol.mode zvol_volmode VOL_RECURSIVE vol.recursive UNSUPPORTED VOL_USE_BLK_MQ UNSUPPORTED zvol_use_blk_mq -BCLONE_ENABLED zfs_bclone_enabled zfs_bclone_enabled -BCLONE_WAIT_DIRTY zfs_bclone_wait_dirty zfs_bclone_wait_dirty +BCLONE_ENABLED bclone_enabled zfs_bclone_enabled +BCLONE_WAIT_DIRTY bclone_wait_dirty zfs_bclone_wait_dirty XATTR_COMPAT xattr_compat zfs_xattr_compat ZEVENT_LEN_MAX zevent.len_max zfs_zevent_len_max ZEVENT_RETAIN_MAX zevent.retain_max zfs_zevent_retain_max diff --git a/tests/zfs-tests/tests/Makefile.am b/tests/zfs-tests/tests/Makefile.am index 3a85e33b1579..02b875f86c1e 100644 --- a/tests/zfs-tests/tests/Makefile.am +++ b/tests/zfs-tests/tests/Makefile.am @@ -478,6 +478,7 @@ nobase_dist_datadir_zfs_tests_tests_SCRIPTS += \ functional/block_cloning/block_cloning_replay.ksh \ functional/block_cloning/block_cloning_replay_encrypted.ksh \ functional/block_cloning/block_cloning_lwb_buffer_overflow.ksh \ + functional/block_cloning/block_cloning_rlimit_fsize.ksh \ functional/bootfs/bootfs_001_pos.ksh \ functional/bootfs/bootfs_002_neg.ksh \ functional/bootfs/bootfs_003_pos.ksh \ diff --git a/tests/zfs-tests/tests/functional/block_cloning/block_cloning_rlimit_fsize.ksh b/tests/zfs-tests/tests/functional/block_cloning/block_cloning_rlimit_fsize.ksh new file mode 100755 index 000000000000..a8a64e52491a --- /dev/null +++ b/tests/zfs-tests/tests/functional/block_cloning/block_cloning_rlimit_fsize.ksh @@ -0,0 +1,64 @@ +#!/bin/ksh -p +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or https://opensource.org/licenses/CDDL-1.0. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +. $STF_SUITE/include/libtest.shlib +. $STF_SUITE/tests/functional/block_cloning/block_cloning.kshlib + +# +# DESCRIPTION: +# When block cloning is used to implement copy_file_range(2), the +# RLIMIT_FSIZE limit must be respected. +# +# STRATEGY: +# 1. Create a pool. +# 2. ??? +# + +verify_runnable "global" + +VDIR=$TEST_BASE_DIR/disk-bclone +VDEV="$VDIR/a" + +function cleanup +{ + datasetexists $TESTPOOL && destroy_pool $TESTPOOL + rm -rf $VDIR +} + +log_onexit cleanup + +log_assert "Test for RLIMIT_FSIZE handling with block cloning enabled" + +log_must rm -rf $VDIR +log_must mkdir -p $VDIR +log_must truncate -s 1G $VDEV + +log_must zpool create -o feature@block_cloning=enabled $TESTPOOL $VDEV + +log_must dd if=/dev/random of=/$TESTPOOL/file1 bs=1 count=1000 + +ulimit -f 2 +log_must clonefile -f /$TESTPOOL/file1 /$TESTPOOL/file2 0 0 all +ulimit -f 1 +log_mustnot clonefile -f /$TESTPOOL/file1 /$TESTPOOL/file3 0 0 all + +log_pass "copy_file_range(2) respects RLIMIT_FSIZE"