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,7 +138,11 @@ 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' | ||||||
| cfr_cross_reason = 'copy_file_range(2) cross-filesystem needs kernel 5.3+' | 
 | ||||||
|  | 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+' | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # These tests are known to fail, thus we use this list to prevent these | # These tests are known to fail, thus we use this list to prevent these | ||||||
| @ -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
	 Tony Hutter
						Tony Hutter