mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Default to zfs_bclone_wait_dirty=1
Update the default FICLONE and FICLONERANGE ioctl behavior to wait on dirty blocks. While this does remove some control from the application, in practice ZFS is better positioned to the optimial thing and immediately force a TXG sync. Reviewed-by: Rob Norris <robn@despairlabs.com> Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com> Reviewed-by: George Melikov <mail@gmelikov.ru> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #17455
This commit is contained in:
+21
@@ -41,16 +41,22 @@ function cleanup
|
||||
{
|
||||
datasetexists $TESTPOOL && destroy_pool $TESTPOOL
|
||||
set_tunable64 TXG_TIMEOUT $timeout
|
||||
log_must restore_tunable BCLONE_WAIT_DIRTY
|
||||
}
|
||||
|
||||
log_onexit cleanup
|
||||
|
||||
log_must save_tunable BCLONE_WAIT_DIRTY
|
||||
|
||||
log_must set_tunable64 TXG_TIMEOUT 5000
|
||||
|
||||
log_must zpool create -o feature@block_cloning=enabled $TESTPOOL $DISKS
|
||||
|
||||
log_must sync_pool $TESTPOOL true
|
||||
|
||||
# Verify fallback to copy when there are dirty blocks
|
||||
log_must set_tunable32 BCLONE_WAIT_DIRTY 0
|
||||
|
||||
log_must dd if=/dev/urandom of=/$TESTPOOL/file bs=128K count=4
|
||||
log_must clonefile -f /$TESTPOOL/file /$TESTPOOL/clone 0 0 524288
|
||||
|
||||
@@ -61,5 +67,20 @@ log_must have_same_content /$TESTPOOL/file /$TESTPOOL/clone
|
||||
typeset blocks=$(get_same_blocks $TESTPOOL file $TESTPOOL clone)
|
||||
log_must [ "$blocks" = "" ]
|
||||
|
||||
log_must rm /$TESTPOOL/file /$TESTPOOL/clone
|
||||
|
||||
# Verify blocks are cloned even when there are dirty blocks
|
||||
log_must set_tunable32 BCLONE_WAIT_DIRTY 1
|
||||
|
||||
log_must dd if=/dev/urandom of=/$TESTPOOL/file bs=128K count=4
|
||||
log_must clonefile -f /$TESTPOOL/file /$TESTPOOL/clone 0 0 524288
|
||||
|
||||
log_must sync_pool $TESTPOOL
|
||||
|
||||
log_must have_same_content /$TESTPOOL/file /$TESTPOOL/clone
|
||||
|
||||
typeset blocks=$(get_same_blocks $TESTPOOL file $TESTPOOL clone)
|
||||
log_must [ "$blocks" = "0 1 2 3" ]
|
||||
|
||||
log_pass $claim
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ function cleanup
|
||||
{
|
||||
datasetexists $TESTPOOL/cp-reflink && \
|
||||
destroy_dataset $$TESTPOOL/cp-reflink -f
|
||||
log_must set_tunable32 BCLONE_WAIT_DIRTY 0
|
||||
log_must restore_tunable BCLONE_WAIT_DIRTY
|
||||
}
|
||||
|
||||
function verify_copy
|
||||
@@ -81,6 +81,8 @@ SRC_SIZE=$((1024 + $RANDOM % 1024))
|
||||
# A smaller recordsize is used merely to speed up the test.
|
||||
RECORDSIZE=4096
|
||||
|
||||
log_must save_tunable BCLONE_WAIT_DIRTY
|
||||
|
||||
log_must zfs create -o recordsize=$RECORDSIZE $TESTPOOL/cp-reflink
|
||||
CP_TESTDIR=$(get_prop mountpoint $TESTPOOL/cp-reflink)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user