aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPankaj Raghav <p.raghav@samsung.com>2022-03-25 11:19:08 +0100
committerEryu Guan <guaneryu@gmail.com>2022-04-10 23:39:16 +0800
commit9577dac5d24f5b57ae1c4fbb960ebac05a233063 (patch)
tree31ff36bb1c353b4431901e69a8e7451c9d71da95
parenta7e2b797f865831fcb883d15e06c2c17246caed8 (diff)
downloadxfstests-dev-9577dac5d24f5b57ae1c4fbb960ebac05a233063.tar.gz
btrfs/237: Use zone cap instead of zone size in fill_size and rest calculation
This test will break when zone capacity != zone size because the calculation of the size to be filled is done using zone_size instead of the actual capacity available per zone. Fix it by using zone capacity. As a zoned device can have variable capacity, use the btrfs utility to get the zone capacity from the first data block group that the test will be performed on. The support to extract zone capacity was added to blkzone only from version 2.37. So zcap will be used only when the blkzone version is greater or equal to 2.37. Signed-off-by: Pankaj Raghav <p.raghav@samsung.com> Reviewed-by: Naohiro Aota <naohiro.aota@wdc.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
-rw-r--r--common/filter13
-rwxr-xr-xtests/btrfs/23721
2 files changed, 30 insertions, 4 deletions
diff --git a/common/filter b/common/filter
index 257227c2b1..5fe86756ef 100644
--- a/common/filter
+++ b/common/filter
@@ -634,5 +634,18 @@ _filter_bash()
sed -e "s/^bash: line 1: /bash: /"
}
+#
+# blkzone report added zone capacity to be printed from v2.37.
+# This filter will add an extra column 'cap' with the same value of
+# 'len'(zone size) for blkzone version < 2.37
+#
+# Before: start: 0x000100000, len 0x040000, wptr 0x000000 ..
+# After: start: 0x000100000, len 0x040000, cap 0x040000, wptr 0x000000 ..
+_filter_blkzone_report()
+{
+ $AWK_PROG -F "," 'BEGIN{OFS=",";} $3 !~ /cap/ {$2=$2","$2;} {print;}' |\
+ sed -e 's/len/cap/2'
+}
+
# make sure this script returns success
/bin/true
diff --git a/tests/btrfs/237 b/tests/btrfs/237
index 96940549ea..f96031d51d 100755
--- a/tests/btrfs/237
+++ b/tests/btrfs/237
@@ -35,8 +35,13 @@ get_data_bg()
grep -Eo "CHUNK_ITEM [[:digit:]]+" | cut -d ' ' -f 2
}
-zonesize=$(cat /sys/block/$(_short_dev $SCRATCH_DEV)/queue/chunk_sectors)
-zonesize=$((zonesize << 9))
+get_data_bg_physical()
+{
+ # Assumes SINGLE data profile
+ $BTRFS_UTIL_PROG inspect-internal dump-tree -t CHUNK $SCRATCH_DEV |\
+ grep -A 4 CHUNK_ITEM | grep -A 3 'type DATA\|SINGLE' |\
+ grep -Eo 'offset [[:digit:]]+'| cut -d ' ' -f 2
+}
_scratch_mkfs >/dev/null 2>&1
_scratch_mount -o commit=1 # 1s commit time to speed up test
@@ -49,12 +54,20 @@ if [[ "$uuid" == "" ]]; then
exit 1
fi
+start_data_bg_phy=$(get_data_bg_physical)
+start_data_bg_phy=$((start_data_bg_phy >> 9))
+
+size=$($BLKZONE_PROG report -o $start_data_bg_phy -l 1 $SCRATCH_DEV |\
+ _filter_blkzone_report |\
+ grep -Po "cap 0x[[:xdigit:]]+" | cut -d ' ' -f 2)
+size=$((size << 9))
+
reclaim_threshold=75
echo $reclaim_threshold > /sys/fs/btrfs/"$uuid"/bg_reclaim_threshold
fill_percent=$((reclaim_threshold + 2))
rest_percent=$((90 - fill_percent)) # make sure we're not creating a new BG
-fill_size=$((zonesize * fill_percent / 100))
-rest=$((zonesize * rest_percent / 100))
+fill_size=$((size * fill_percent / 100))
+rest=$((size * rest_percent / 100))
# step 1, fill FS over $fillsize
$XFS_IO_PROG -fc "pwrite 0 $fill_size" $SCRATCH_MNT/$seq.test1 >> $seqres.full