mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-01-25 10:12:13 +03:00
Improve and fix gang blocks dyn header test
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com> Signed-off-by: Paul Dagnelie <paul.dagnelie@klarasystems.com> Sponsored-by: Klara, Inc. Sponsored-by: Wasabi Technology, Inc. Closes #17587
This commit is contained in:
parent
2c8beeece0
commit
8ecf044d62
@ -72,6 +72,23 @@ function get_num_dvas
|
|||||||
sed 's/.*L[0-9] \(.*\) [a-f0-9]*L.*/\1/' | awk '{print NF}'
|
sed 's/.*L[0-9] \(.*\) [a-f0-9]*L.*/\1/' | awk '{print NF}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function check_gang_bp
|
||||||
|
{
|
||||||
|
typeset gang="$(echo -n $1 | grep -c 'gang')"
|
||||||
|
[[ "$gang" == "1" ]] || return 1
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_is_gang_bp
|
||||||
|
{
|
||||||
|
check_gang_bp $1 || log_fail "Not a gang DVA: \"$1\""
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_not_gang_bp
|
||||||
|
{
|
||||||
|
check_gang_bp $1 && log_fail "Gang DVA: \"$1\""
|
||||||
|
}
|
||||||
|
|
||||||
function check_gang_dva
|
function check_gang_dva
|
||||||
{
|
{
|
||||||
typeset last_byte="$(echo -n $1 | tail -c 1)"
|
typeset last_byte="$(echo -n $1 | tail -c 1)"
|
||||||
|
|||||||
@ -33,41 +33,49 @@ log_assert "Verify that we don't use large gang headers on small-ashift pools".
|
|||||||
log_onexit cleanup
|
log_onexit cleanup
|
||||||
preamble
|
preamble
|
||||||
|
|
||||||
log_must zpool create -f -o ashift=12 -o feature@dynamic_gang_header=enabled $TESTPOOL $DISKS
|
for vdevtype in "" "mirror" "raidz" "raidz2" "draid"; do
|
||||||
log_must zfs create -o recordsize=1M $TESTPOOL/$TESTFS
|
log_must zpool create -f -o ashift=12 $TESTPOOL $vdevtype $DISKS
|
||||||
mountpoint=$(get_prop mountpoint $TESTPOOL/$TESTFS)
|
log_must zfs create -o recordsize=1M $TESTPOOL/$TESTFS
|
||||||
set_tunable64 METASLAB_FORCE_GANGING 200000
|
mountpoint=$(get_prop mountpoint $TESTPOOL/$TESTFS)
|
||||||
set_tunable32 METASLAB_FORCE_GANGING_PCT 100
|
set_tunable64 METASLAB_FORCE_GANGING 200000
|
||||||
|
set_tunable32 METASLAB_FORCE_GANGING_PCT 100
|
||||||
|
|
||||||
status=$(get_pool_prop feature@dynamic_gang_header $TESTPOOL)
|
status=$(get_pool_prop feature@dynamic_gang_header $TESTPOOL)
|
||||||
[[ "$status" == "enabled" ]] || log_fail "Dynamic gang headers not enabled"
|
[[ "$status" == "enabled" ]] || \
|
||||||
path="${mountpoint}/file"
|
log_fail "Dynamic gang headers not enabled"
|
||||||
log_must dd if=/dev/urandom of=$path bs=1M count=1
|
path="${mountpoint}/file"
|
||||||
log_must zpool sync $TESTPOOL
|
log_must dd if=/dev/urandom of=$path bs=1M count=1
|
||||||
first_block=$(get_first_block_dva $TESTPOOL/$TESTFS file)
|
log_must zpool sync $TESTPOOL
|
||||||
leaves=$(read_gang_header $TESTPOOL $first_block 1000 | grep -v HOLE)
|
first_block=$(get_first_block_dva $TESTPOOL/$TESTFS file)
|
||||||
first_dva=$(echo "$leaves" | head -n 1 | awk '{print $1}' | sed 's/.*<//' | sed 's/>.*//')
|
leaves=$(read_gang_header $TESTPOOL $first_block 1000 | \
|
||||||
check_not_gang_dva $first_dva
|
grep -v HOLE | grep -v "^Found")
|
||||||
|
first_child=$(echo "$leaves" | head -n 1)
|
||||||
|
check_gang_bp $first_child
|
||||||
|
|
||||||
num_leaves=$(echo "$leaves" | wc -l)
|
num_leaves=$(echo "$leaves" | wc -l)
|
||||||
[[ "$num_leaves" -gt 3 ]] && log_fail "used a larger gang header too soon: \"$leaves\""
|
[[ "$num_leaves" -gt 3 ]] && \
|
||||||
log_must verify_pool $TESTPOOL
|
log_fail "used a larger gang header too soon: \"$leaves\""
|
||||||
status=$(get_pool_prop feature@dynamic_gang_header $TESTPOOL)
|
log_must verify_pool $TESTPOOL
|
||||||
[[ "$status" == "active" ]] || log_fail "Dynamic gang headers not active"
|
status=$(get_pool_prop feature@dynamic_gang_header $TESTPOOL)
|
||||||
|
[[ "$status" == "active" ]] || log_fail "Dynamic gang headers not active"
|
||||||
|
|
||||||
path="${mountpoint}/file2"
|
path="${mountpoint}/file2"
|
||||||
log_must dd if=/dev/urandom of=$path bs=1M count=1
|
log_must dd if=/dev/urandom of=$path bs=1M count=1
|
||||||
log_must zpool sync $TESTPOOL
|
log_must zpool sync $TESTPOOL
|
||||||
first_block=$(get_first_block_dva $TESTPOOL/$TESTFS file2)
|
first_block=$(get_first_block_dva $TESTPOOL/$TESTFS file2)
|
||||||
leaves=$(read_gang_header $TESTPOOL $first_block 1000 | grep -v HOLE)
|
leaves=$(read_gang_header $TESTPOOL $first_block 1000 | \
|
||||||
first_dva=$(echo "$leaves" | head -n 1 | awk '{print $1}' | sed 's/.*<//' | sed 's/>.*//')
|
grep -v HOLE | grep -v "^Found")
|
||||||
check_not_gang_dva $first_dva
|
first_child=$(echo "$leaves" | head -n 1)
|
||||||
|
check_not_gang_bp $first_child
|
||||||
|
|
||||||
num_leaves=$(echo "$leaves" | wc -l)
|
num_leaves=$(echo "$leaves" | wc -l)
|
||||||
[[ "$num_leaves" -gt 3 ]] || log_fail "didn't use a larger gang header: \"$leaves\""
|
[[ "$num_leaves" -gt 3 ]] || \
|
||||||
|
log_fail "didn't use a larger gang header: \"$leaves\""
|
||||||
|
|
||||||
|
|
||||||
log_must verify_pool $TESTPOOL
|
log_must verify_pool $TESTPOOL
|
||||||
status=$(get_pool_prop feature@dynamic_gang_header $TESTPOOL)
|
status=$(get_pool_prop feature@dynamic_gang_header $TESTPOOL)
|
||||||
[[ "$status" == "active" ]] || log_fail "Dynamic gang headers not active"
|
[[ "$status" == "active" ]] || log_fail "Dynamic gang headers not active"
|
||||||
|
log_must zpool destroy $TESTPOOL
|
||||||
|
done
|
||||||
log_pass "We don't use large gang headers on small-ashift pools".
|
log_pass "We don't use large gang headers on small-ashift pools".
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user