mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 11:29:36 +03:00
0c656a964d
This change allows mountpoint_003_pos and send-c_props to run on Linux kernels that do not support mandatory locking. Linux kernel versions greater than or equal to 4.4 no longer support mandatory locking and the test suite will now account for that. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed-by: George Melikov <mail@gmelikov.ru> Signed-off-by: Giuseppe Di Natale <dinatale2@llnl.gov> Closes #6346 Closes #6347 Closes #6362
150 lines
3.8 KiB
Plaintext
150 lines
3.8 KiB
Plaintext
#
|
|
# This file and its contents are supplied under the terms of the
|
|
# Common Development and Distribution License ("CDDL"), version 1.0.
|
|
# You may only use this file in accordance with the terms of version
|
|
# 1.0 of the CDDL.
|
|
#
|
|
# A full copy of the text of the CDDL should have accompanied this
|
|
# source. A copy of the CDDL is also available via the Internet at
|
|
# http://www.illumos.org/license/CDDL.
|
|
#
|
|
|
|
#
|
|
# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
|
|
#
|
|
|
|
typeset -a compress_prop_vals=('on' 'off' 'lzjb' 'gzip' 'gzip-1' 'gzip-2'
|
|
'gzip-3' 'gzip-4' 'gzip-5' 'gzip-6' 'gzip-7' 'gzip-8' 'gzip-9' 'zle' 'lz4')
|
|
typeset -a checksum_prop_vals=('on' 'off' 'fletcher2' 'fletcher4' 'sha256'
|
|
'noparity' 'sha512' 'skein' 'edonr')
|
|
typeset -a recsize_prop_vals=('512' '1024' '2048' '4096' '8192' '16384'
|
|
'32768' '65536' '131072' '262144' '524288' '1048576')
|
|
typeset -a canmount_prop_vals=('on' 'off' 'noauto')
|
|
typeset -a copies_prop_vals=('1' '2' '3')
|
|
typeset -a logbias_prop_vals=('latency' 'throughput')
|
|
typeset -a primarycache_prop_vals=('all' 'none' 'metadata')
|
|
typeset -a redundant_metadata_prop_vals=('all' 'most')
|
|
typeset -a secondarycache_prop_vals=('all' 'none' 'metadata')
|
|
typeset -a snapdir_prop_vals=('hidden' 'visible')
|
|
typeset -a sync_prop_vals=('standard' 'always' 'disabled')
|
|
|
|
typeset -a fs_props=('compress' 'checksum' 'recsize'
|
|
'canmount' 'copies' 'logbias' 'primarycache' 'redundant_metadata'
|
|
'secondarycache' 'snapdir' 'sync')
|
|
typeset -a vol_props=('compress' 'checksum' 'copies' 'logbias' 'primarycache'
|
|
'secondarycache' 'redundant_metadata' 'sync')
|
|
|
|
#
|
|
# Given the property array passed in, return 'num_props' elements to the
|
|
# user, excluding any elements below 'start.' This allows us to exclude
|
|
# 'off' and 'on' which can be either unwanted, or a duplicate of another
|
|
# property respectively.
|
|
#
|
|
function get_rand_prop
|
|
{
|
|
typeset prop_array=($(eval echo \${$1[@]}))
|
|
typeset -i num_props=$2
|
|
typeset -i start=$3
|
|
typeset retstr=""
|
|
|
|
[[ -z $prop_array || -z $num_props || -z $start ]] && \
|
|
log_fail "get_rand_prop: bad arguments"
|
|
|
|
typeset prop_max=$((${#prop_array[@]} - 1))
|
|
typeset -i i
|
|
for i in $(shuf -i $start-$prop_max -n $num_props); do
|
|
retstr="${prop_array[$i]} $retstr"
|
|
done
|
|
echo $retstr
|
|
}
|
|
|
|
function get_rand_compress
|
|
{
|
|
get_rand_prop compress_prop_vals $1 2
|
|
}
|
|
|
|
function get_rand_compress_any
|
|
{
|
|
get_rand_prop compress_prop_vals $1 0
|
|
}
|
|
|
|
function get_rand_checksum
|
|
{
|
|
get_rand_prop checksum_prop_vals $1 2
|
|
}
|
|
|
|
function get_rand_checksum_any
|
|
{
|
|
get_rand_prop checksum_prop_vals $1 0
|
|
}
|
|
|
|
function get_rand_recsize
|
|
{
|
|
get_rand_prop recsize_prop_vals $1 0
|
|
}
|
|
|
|
function get_rand_large_recsize
|
|
{
|
|
get_rand_prop recsize_prop_vals $1 9
|
|
}
|
|
|
|
#
|
|
# Functions to toggle on/off properties
|
|
#
|
|
typeset -a binary_props=('atime' 'devices' 'exec' 'readonly' 'setuid' 'xattr'
|
|
'zoned')
|
|
|
|
if is_linux; then
|
|
# Only older kernels support non-blocking mandatory locks
|
|
if [[ $(linux_version) -lt $(linux_version "4.4") ]]; then
|
|
binary_props+=('nbmand')
|
|
fi
|
|
else
|
|
binary_props+=('nbmand')
|
|
fi
|
|
|
|
function toggle_prop
|
|
{
|
|
typeset ds=$1
|
|
typeset prop=$2
|
|
|
|
datasetexists $ds || log_fail "$ds does not exist"
|
|
typeset val=$(get_prop $prop $ds)
|
|
typeset newval='off'
|
|
|
|
[[ $val = $newval ]] && newval='on'
|
|
log_must zfs set $prop=$newval $ds
|
|
}
|
|
|
|
function toggle_binary_props
|
|
{
|
|
typeset ds=$1
|
|
typeset prop
|
|
|
|
for prop in "${binary_props[@]}"; do
|
|
toggle_prop $ds $prop
|
|
done
|
|
}
|
|
|
|
function randomize_ds_props
|
|
{
|
|
typeset ds=$1
|
|
typeset prop proplist val
|
|
|
|
datasetexists $ds || log_fail "$ds does not exist"
|
|
if ds_is_volume $ds; then
|
|
toggle_prop $ds readonly
|
|
proplist="${vol_props[@]}"
|
|
elif ds_is_filesystem $ds; then
|
|
toggle_binary_props $ds
|
|
proplist="${fs_props[@]}"
|
|
else
|
|
log_fail "$ds is neither a volume nor a file system"
|
|
fi
|
|
|
|
for prop in $proplist; do
|
|
typeset val=$(get_rand_prop "${prop}_prop_vals" 1 0)
|
|
log_must zfs set $prop=$val $ds
|
|
done
|
|
}
|