@@ -1422,7 +1422,7 @@ _scratch_get_bmx_prefix() {
_scratch_get_iext_count()
{
- local ino=$1
+ local selector=$1
local whichfork=$2
local field=""
@@ -1437,7 +1437,7 @@ _scratch_get_iext_count()
return 1
esac
- _scratch_xfs_get_metadata_field $field "inode $ino"
+ _scratch_xfs_get_metadata_field $field "$selector"
}
#
@@ -1843,3 +1843,31 @@ _require_xfs_parent()
|| _notrun "kernel does not support parent pointers"
_scratch_unmount
}
+
+# Find a metadata file within an xfs filesystem. The sole argument is the
+# name of the field within the superblock.
+_scratch_xfs_find_metafile()
+{
+ local metafile="$1"
+ local selector=
+
+ if ! _check_scratch_xfs_features METADIR > /dev/null; then
+ sb_field="$(_scratch_xfs_get_sb_field "$metafile")"
+ if echo "$sb_field" | grep -q -w 'not found'; then
+ return 1
+ fi
+ selector="inode $sb_field"
+ else
+ case "${metafile}" in
+ "rootino") selector="path /";;
+ "uquotino") selector="path -m /quota/user";;
+ "gquotino") selector="path -m /quota/group";;
+ "pquotino") selector="path -m /quota/project";;
+ "rbmino") selector="path -m /realtime/bitmap";;
+ "rsumino") selector="path -m /realtime/summary";;
+ esac
+ fi
+
+ echo "${selector}"
+ return 0
+}
@@ -22,6 +22,11 @@ _require_xfs_quota
_scratch_mkfs_xfs | _filter_mkfs > /dev/null 2> $tmp.mkfs
. $tmp.mkfs
+get_qfile_nblocks() {
+ local selector="$(_scratch_xfs_find_metafile "$1")"
+ _scratch_xfs_db -c "$selector" -c "p core.nblocks"
+}
+
do_test()
{
qino_1=$1
@@ -31,12 +36,9 @@ do_test()
echo "*** umount"
_scratch_unmount
- QINO_1=`_scratch_xfs_get_sb_field $qino_1`
- QINO_2=`_scratch_xfs_get_sb_field $qino_2`
-
echo "*** Usage before quotarm ***"
- _scratch_xfs_db -c "inode $QINO_1" -c "p core.nblocks"
- _scratch_xfs_db -c "inode $QINO_2" -c "p core.nblocks"
+ get_qfile_nblocks $qino_1
+ get_qfile_nblocks $qino_2
_qmount
echo "*** turn off $off_opts quotas"
@@ -66,8 +68,8 @@ do_test()
_scratch_unmount
echo "*** Usage after quotarm ***"
- _scratch_xfs_db -c "inode $QINO_1" -c "p core.nblocks"
- _scratch_xfs_db -c "inode $QINO_2" -c "p core.nblocks"
+ get_qfile_nblocks $qino_1
+ get_qfile_nblocks $qino_2
}
# Test user and group first
@@ -163,9 +163,8 @@ done
_scratch_unmount >> $seqres.full
echo "Verify uquota inode's extent count"
-uquotino=$(_scratch_xfs_get_metadata_field 'uquotino' 'sb 0')
-
-nextents=$(_scratch_get_iext_count $uquotino data || \
+selector="$(_scratch_xfs_find_metafile uquotino)"
+nextents=$(_scratch_get_iext_count "$selector" data || \
_fail "Unable to obtain inode fork's extent count")
if (( $nextents > 10 )); then
echo "Extent count overflow check failed: nextents = $nextents"
@@ -104,10 +104,8 @@ _scratch_unmount >> $seqres.full
echo "Verify rbmino's and rsumino's extent count"
for rtino in rbmino rsumino; do
- ino=$(_scratch_xfs_get_metadata_field $rtino "sb 0")
- echo "$rtino = $ino" >> $seqres.full
-
- nextents=$(_scratch_get_iext_count $ino data || \
+ selector="$(_scratch_xfs_find_metafile "$rtino")"
+ nextents=$(_scratch_get_iext_count "$selector" data || \
_fail "Unable to obtain inode fork's extent count")
if (( $nextents > 10 )); then
echo "Extent count overflow check failed: nextents = $nextents"
@@ -27,13 +27,8 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "Fuzz rtbitmap"
-is_metadir=$(_scratch_xfs_get_metadata_field "core.version" 'path -m /realtime/0.bitmap')
-if [ -n "$is_metadir" ]; then
- path=('path -m /realtime/0.bitmap')
-else
- path=('sb' 'addr rbmino')
-fi
-_scratch_xfs_fuzz_metadata '' 'online' "${path[@]}" 'dblock 0' >> $seqres.full
+path="$(_scratch_xfs_find_metafile rbmino)"
+_scratch_xfs_fuzz_metadata '' 'online' "$path" 'dblock 0' >> $seqres.full
echo "Done fuzzing rtbitmap"
# success, all done
@@ -27,13 +27,8 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "Fuzz rtsummary"
-is_metadir=$(_scratch_xfs_get_metadata_field "core.version" 'path -m /realtime/0.summary')
-if [ -n "$is_metadir" ]; then
- path=('path -m /realtime/0.summary')
-else
- path=('sb' 'addr rsumino')
-fi
-_scratch_xfs_fuzz_metadata '' 'online' "${path[@]}" 'dblock 0' >> $seqres.full
+path="$(_scratch_xfs_find_metafile rsumino)"
+_scratch_xfs_fuzz_metadata '' 'online' "$path" 'dblock 0' >> $seqres.full
echo "Done fuzzing rtsummary"
# success, all done
@@ -27,13 +27,8 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "Fuzz rtbitmap"
-is_metadir=$(_scratch_xfs_get_metadata_field "core.version" 'path -m /realtime/0.bitmap')
-if [ -n "$is_metadir" ]; then
- path=('path -m /realtime/0.bitmap')
-else
- path=('sb' 'addr rbmino')
-fi
-_scratch_xfs_fuzz_metadata '' 'offline' "${path[@]}" 'dblock 0' >> $seqres.full
+path="$(_scratch_xfs_find_metafile rbmino)"
+_scratch_xfs_fuzz_metadata '' 'offline' "$path" 'dblock 0' >> $seqres.full
echo "Done fuzzing rtbitmap"
# success, all done
@@ -27,13 +27,8 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "Fuzz rtsummary"
-is_metadir=$(_scratch_xfs_get_metadata_field "core.version" 'path -m /realtime/0.summary')
-if [ -n "$is_metadir" ]; then
- path=('path -m /realtime/0.summary')
-else
- path=('sb' 'addr rsumino')
-fi
-_scratch_xfs_fuzz_metadata '' 'offline' "${path[@]}" 'dblock 0' >> $seqres.full
+path="$(_scratch_xfs_find_metafile rsumino)"
+_scratch_xfs_fuzz_metadata '' 'offline' "$path" 'dblock 0' >> $seqres.full
echo "Done fuzzing rtsummary"
# success, all done
@@ -28,13 +28,8 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "Fuzz rtbitmap"
-is_metadir=$(_scratch_xfs_get_metadata_field "core.version" 'path -m /realtime/0.bitmap')
-if [ -n "$is_metadir" ]; then
- path=('path -m /realtime/0.bitmap')
-else
- path=('sb' 'addr rbmino')
-fi
-_scratch_xfs_fuzz_metadata '' 'both' "${path[@]}" 'dblock 0' >> $seqres.full
+path="$(_scratch_xfs_find_metafile rbmino)"
+_scratch_xfs_fuzz_metadata '' 'both' "$path" 'dblock 0' >> $seqres.full
echo "Done fuzzing rtbitmap"
# success, all done
@@ -28,13 +28,8 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "Fuzz rtsummary"
-is_metadir=$(_scratch_xfs_get_metadata_field "core.version" 'path -m /realtime/0.summary')
-if [ -n "$is_metadir" ]; then
- path=('path -m /realtime/0.summary')
-else
- path=('sb' 'addr rsumino')
-fi
-_scratch_xfs_fuzz_metadata '' 'both' "${path[@]}" 'dblock 0' >> $seqres.full
+path="$(_scratch_xfs_find_metafile rsumino)"
+_scratch_xfs_fuzz_metadata '' 'both' "$path" 'dblock 0' >> $seqres.full
echo "Done fuzzing rtsummary"
# success, all done
@@ -27,13 +27,8 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "Fuzz rtbitmap"
-is_metadir=$(_scratch_xfs_get_metadata_field "core.version" 'path -m /realtime/0.bitmap')
-if [ -n "$is_metadir" ]; then
- path=('path -m /realtime/0.bitmap')
-else
- path=('sb' 'addr rbmino')
-fi
-_scratch_xfs_fuzz_metadata '' 'none' "${path[@]}" 'dblock 0' >> $seqres.full
+path="$(_scratch_xfs_find_metafile rbmino)"
+_scratch_xfs_fuzz_metadata '' 'none' "$path" 'dblock 0' >> $seqres.full
echo "Done fuzzing rtbitmap"
# success, all done
@@ -27,13 +27,8 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "Fuzz rtsummary"
-is_metadir=$(_scratch_xfs_get_metadata_field "core.version" 'path -m /realtime/0.summary')
-if [ -n "$is_metadir" ]; then
- path=('path -m /realtime/0.summary')
-else
- path=('sb' 'addr rsumino')
-fi
-_scratch_xfs_fuzz_metadata '' 'none' "${path[@]}" 'dblock 0' >> $seqres.full
+path="$(_scratch_xfs_find_metafile rsumino)"
+_scratch_xfs_fuzz_metadata '' 'none' "$path" 'dblock 0' >> $seqres.full
echo "Done fuzzing rtsummary"
# success, all done