mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	ZTS: Skip cross-fs bclone tests if FreeBSD < 14.0
Skip cross filesystem block cloning tests on FreeBSD if running less than version 14.0. Cross filesystem copy_file_range() was added in FreeBSD 14. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #15901
This commit is contained in:
		
							parent
							
								
									d92fbe2150
								
							
						
					
					
						commit
						b62fd2cef9
					
				@ -138,6 +138,10 @@ idmap_reason = 'Idmapped mount needs kernel 5.12+'
 | 
				
			|||||||
# copy_file_range() is not supported by all kernels
 | 
					# copy_file_range() is not supported by all kernels
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
cfr_reason = 'Kernel copy_file_range support required'
 | 
					cfr_reason = 'Kernel copy_file_range support required'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if sys.platform.startswith('freebsd'):
 | 
				
			||||||
 | 
					    cfr_cross_reason = 'copy_file_range(2) cross-filesystem needs FreeBSD 14+'
 | 
				
			||||||
 | 
					else:
 | 
				
			||||||
    cfr_cross_reason = 'copy_file_range(2) cross-filesystem needs kernel 5.3+'
 | 
					    cfr_cross_reason = 'copy_file_range(2) cross-filesystem needs kernel 5.3+'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
@ -268,6 +272,22 @@ if sys.platform.startswith('freebsd'):
 | 
				
			|||||||
        'pool_checkpoint/checkpoint_indirect': ['FAIL', 12623],
 | 
					        'pool_checkpoint/checkpoint_indirect': ['FAIL', 12623],
 | 
				
			||||||
        'resilver/resilver_restart_001': ['FAIL', known_reason],
 | 
					        'resilver/resilver_restart_001': ['FAIL', known_reason],
 | 
				
			||||||
        'snapshot/snapshot_002_pos': ['FAIL', '14831'],
 | 
					        'snapshot/snapshot_002_pos': ['FAIL', '14831'],
 | 
				
			||||||
 | 
					        'bclone/bclone_crossfs_corner_cases': ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'bclone/bclone_crossfs_corner_cases_limited':
 | 
				
			||||||
 | 
					            ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'bclone/bclone_crossfs_data': ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'bclone/bclone_crossfs_embedded': ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'bclone/bclone_crossfs_hole': ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'bclone/bclone_diffprops_all': ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'bclone/bclone_diffprops_checksum': ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'bclone/bclone_diffprops_compress': ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'bclone/bclone_diffprops_copies': ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'bclone/bclone_diffprops_recordsize': ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'bclone/bclone_prop_sync': ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'block_cloning/block_cloning_cross_enc_dataset':
 | 
				
			||||||
 | 
					            ['SKIP', cfr_cross_reason],
 | 
				
			||||||
 | 
					        'block_cloning/block_cloning_copyfilerange_cross_dataset':
 | 
				
			||||||
 | 
					            ['SKIP', cfr_cross_reason]
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
elif sys.platform.startswith('linux'):
 | 
					elif sys.platform.startswith('linux'):
 | 
				
			||||||
    maybe.update({
 | 
					    maybe.update({
 | 
				
			||||||
 | 
				
			|||||||
@ -61,13 +61,8 @@ function compare_version_gte
 | 
				
			|||||||
	[ "$(printf "$1\n$2" | sort -V | tail -n1)" = "$1" ]
 | 
						[ "$(printf "$1\n$2" | sort -V | tail -n1)" = "$1" ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Linux kernel version comparison function
 | 
					# Helper function used by linux_version() and freebsd_version()
 | 
				
			||||||
#
 | 
					function kernel_version
 | 
				
			||||||
# $1 Linux version ("4.10", "2.6.32") or blank for installed Linux version
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Used for comparison: if [ $(linux_version) -ge $(linux_version "2.6.32") ]
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
function linux_version
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	typeset ver="$1"
 | 
						typeset ver="$1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -83,6 +78,24 @@ function linux_version
 | 
				
			|||||||
	echo $((version * 100000 + major * 1000 + minor))
 | 
						echo $((version * 100000 + major * 1000 + minor))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Linux kernel version comparison function
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# $1 Linux version ("4.10", "2.6.32") or blank for installed Linux version
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Used for comparison: if [ $(linux_version) -ge $(linux_version "2.6.32") ]
 | 
				
			||||||
 | 
					function linux_version {
 | 
				
			||||||
 | 
						kernel_version "$1"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# FreeBSD version comparison function
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# $1 FreeBSD version ("13.2", "14.0") or blank for installed FreeBSD version
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Used for comparison: if [ $(freebsd_version) -ge $(freebsd_version "13.2") ]
 | 
				
			||||||
 | 
					function freebsd_version {
 | 
				
			||||||
 | 
						kernel_version "$1"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Determine if this is a Linux test system
 | 
					# Determine if this is a Linux test system
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Return 0 if platform Linux, 1 if otherwise
 | 
					# Return 0 if platform Linux, 1 if otherwise
 | 
				
			||||||
 | 
				
			|||||||
@ -42,6 +42,12 @@ function verify_crossfs_block_cloning
 | 
				
			|||||||
	if is_linux && [[ $(linux_version) -lt $(linux_version "5.3") ]]; then
 | 
						if is_linux && [[ $(linux_version) -lt $(linux_version "5.3") ]]; then
 | 
				
			||||||
		log_unsupported "copy_file_range can't copy cross-filesystem before Linux 5.3"
 | 
							log_unsupported "copy_file_range can't copy cross-filesystem before Linux 5.3"
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# Cross dataset block cloning only supported on FreeBSD 14+
 | 
				
			||||||
 | 
						# https://github.com/freebsd/freebsd-src/commit/969071be938c
 | 
				
			||||||
 | 
					        if is_freebsd && [ $(freebsd_version) -lt $(freebsd_version 14.0) ] ; then
 | 
				
			||||||
 | 
					               log_unsupported "Cloning across datasets not supported in $(uname -r)"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Unused.
 | 
					# Unused.
 | 
				
			||||||
 | 
				
			|||||||
@ -26,12 +26,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
. $STF_SUITE/include/libtest.shlib
 | 
					. $STF_SUITE/include/libtest.shlib
 | 
				
			||||||
. $STF_SUITE/tests/functional/block_cloning/block_cloning.kshlib
 | 
					. $STF_SUITE/tests/functional/block_cloning/block_cloning.kshlib
 | 
				
			||||||
 | 
					. $STF_SUITE/tests/functional/bclone/bclone_common.kshlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
verify_runnable "global"
 | 
					verify_runnable "global"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if is_linux && [[ $(linux_version) -lt $(linux_version "5.3") ]]; then
 | 
					verify_crossfs_block_cloning
 | 
				
			||||||
  log_unsupported "copy_file_range can't copy cross-filesystem before Linux 5.3"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
claim="The copy_file_range syscall can clone across datasets."
 | 
					claim="The copy_file_range syscall can clone across datasets."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -26,12 +26,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
. $STF_SUITE/include/libtest.shlib
 | 
					. $STF_SUITE/include/libtest.shlib
 | 
				
			||||||
. $STF_SUITE/tests/functional/block_cloning/block_cloning.kshlib
 | 
					. $STF_SUITE/tests/functional/block_cloning/block_cloning.kshlib
 | 
				
			||||||
 | 
					. $STF_SUITE/tests/functional/bclone/bclone_common.kshlib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
verify_runnable "global"
 | 
					verify_runnable "global"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if is_linux && [[ $(linux_version) -lt $(linux_version "5.3") ]]; then
 | 
					verify_crossfs_block_cloning
 | 
				
			||||||
  log_unsupported "copy_file_range can't copy cross-filesystem before Linux 5.3"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
claim="Block cloning across encrypted datasets."
 | 
					claim="Block cloning across encrypted datasets."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user