[PATCH 3/7] xfs/27[24]: adapt for checking files on the realtime volume

Darrick J. Wong
2025-02-19T01:07:49Z

From: Darrick J. Wong <djwong@kernel.org>

Adapt both tests to behave properly if the two files being tested are on
the realtime volume.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
tests/xfs/272 | 40 +++++++++++++++++++++++++------------
tests/xfs/274 | 62 ++++++++++++++++++++++++++++++++++++++++-----------------
2 files changed, 70 insertions(+), 32 deletions(-)

diff --git a/tests/xfs/272 b/tests/xfs/272
index 1d0edf67600aa5..0a7a7273ac92a0 100755
--- a/tests/xfs/272
+++ b/tests/xfs/272
@@ -38,26 +38,40 @@ $here/src/punch-alternating $SCRATCH_MNT/urk >> $seqres.full
ino=$(stat -c '%i' $SCRATCH_MNT/urk)

echo "Get fsmap" | tee -a $seqres.full
-$XFS_IO_PROG -c 'fsmap -v' $SCRATCH_MNT >> $seqres.full
$XFS_IO_PROG -c 'fsmap -v' $SCRATCH_MNT | tr '[]()' ' ' > $TEST_DIR/fsmap
+cat $TEST_DIR/fsmap >> $seqres.full

echo "Get bmap" | tee -a $seqres.full
-$XFS_IO_PROG -c 'bmap -v' $SCRATCH_MNT/urk >> $seqres.full
$XFS_IO_PROG -c 'bmap -v' $SCRATCH_MNT/urk | grep '^[[:space:]]*[0-9]*:' | grep -v 'hole' | tr '[]()' ' ' > $TEST_DIR/bmap
+cat $TEST_DIR/bmap >> $seqres.full

echo "Check bmap and fsmap" | tee -a $seqres.full
-cat $TEST_DIR/bmap | while read ext offrange colon blockrange ag agrange total crap; do
- qstr="^[[:space:]]*[0-9]*:[[:space:]]*[0-9]*:[0-9]*[[:space:]]*${blockrange} :[[:space:]]*${ino}[[:space:]]*${offrange}[[:space:]]*${ag}[[:space:]]*${agrange}[[:space:]]*${total}(| [01]*)$"
- echo "${qstr}" >> $seqres.full
- grep "${qstr}" $TEST_DIR/fsmap >> $seqres.full
- found=$(grep -E -c "${qstr}" $TEST_DIR/fsmap)
- test $found -eq 1 || echo "Unexpected output for offset ${offrange}."
-done
+if $XFS_IO_PROG -c 'stat -v' $SCRATCH_MNT/urk | grep -q realtime; then
+ # file on rt volume
+ cat $TEST_DIR/bmap | while read ext offrange colon rtblockrange total crap; do
+ qstr="^[[:space:]]*[0-9]*:[[:space:]]*[0-9]*:[0-9]*[[:space:]]*${rtblockrange} :[[:space:]]*${ino}[[:space:]]*${offrange}[[:space:]]*${total}(| [01]*)$"
+ echo "${qstr}" >> $seqres.full
+ grep "${qstr}" $TEST_DIR/fsmap >> $seqres.full
+ found=$(grep -E -c "${qstr}" $TEST_DIR/fsmap)
+ test $found -eq 1 || echo "Unexpected output for offset ${offrange}."
+ done

-echo "Check device field of FS metadata and regular file"
-data_dev=$(grep 'inode btree' $TEST_DIR/fsmap | head -n 1 | awk '{print $2}')
-rt_dev=$(grep "${ino}[[:space:]]*[0-9]*\.\.[0-9]*" $TEST_DIR/fsmap | head -n 1 | awk '{print $2}')
-test "${data_dev}" = "${rt_dev}" || echo "data ${data_dev} realtime ${rt_dev}?"
+ echo "Check device field of FS metadata and regular file"
+else
+ # file on data volume
+ cat $TEST_DIR/bmap | while read ext offrange colon blockrange ag agrange total crap; do
+ qstr="^[[:space:]]*[0-9]*:[[:space:]]*[0-9]*:[0-9]*[[:space:]]*${blockrange} :[[:space:]]*${ino}[[:space:]]*${offrange}[[:space:]]*${ag}[[:space:]]*${agrange}[[:space:]]*${total}(| [01]*)$"
+ echo "${qstr}" >> $seqres.full
+ grep "${qstr}" $TEST_DIR/fsmap >> $seqres.full
+ found=$(grep -E -c "${qstr}" $TEST_DIR/fsmap)
+ test $found -eq 1 || echo "Unexpected output for offset ${offrange}."
+ done
+
+ echo "Check device field of FS metadata and regular file"
+ data_dev=$(grep 'inode btree' $TEST_DIR/fsmap | head -n 1 | awk '{print $2}')
+ rt_dev=$(grep "${ino}[[:space:]]*[0-9]*\.\.[0-9]*" $TEST_DIR/fsmap | head -n 1 | awk '{print $2}')
+ test "${data_dev}" = "${rt_dev}" || echo "data ${data_dev} realtime ${rt_dev}?"
+fi

# success, all done
status=0
diff --git a/tests/xfs/274 b/tests/xfs/274
index a6bdc7c032bb38..bb07ca7b58cf8a 100755
--- a/tests/xfs/274
+++ b/tests/xfs/274
@@ -38,34 +38,58 @@ _cp_reflink $SCRATCH_MNT/f1 $SCRATCH_MNT/f2
ino=$(stat -c '%i' $SCRATCH_MNT/f1)

echo "Get fsmap" | tee -a $seqres.full
-$XFS_IO_PROG -c 'fsmap -v' $SCRATCH_MNT >> $seqres.full
$XFS_IO_PROG -c 'fsmap -v' $SCRATCH_MNT | tr '[]()' ' ' > $TEST_DIR/fsmap
+cat $TEST_DIR/fsmap >> $seqres.full

echo "Get f1 bmap" | tee -a $seqres.full
-$XFS_IO_PROG -c 'bmap -v' $SCRATCH_MNT/f1 >> $seqres.full
$XFS_IO_PROG -c 'bmap -v' $SCRATCH_MNT/f1 | grep '^[[:space:]]*[0-9]*:' | grep -v 'hole' | tr '[]()' ' ' > $TEST_DIR/bmap
+cat $TEST_DIR/bmap >> $seqres.full

-echo "Check f1 bmap and fsmap" | tee -a $seqres.full
-cat $TEST_DIR/bmap | while read ext offrange colon blockrange ag agrange total crap; do
- qstr="^[[:space:]]*[0-9]*:[[:space:]]*[0-9]*:[0-9]*[[:space:]]*${blockrange} :[[:space:]]*${ino}[[:space:]]*${offrange}[[:space:]]*${ag}[[:space:]]*${agrange}[[:space:]]*${total} 010[01]{4}$"
- echo "${qstr}" >> $seqres.full
- grep "${qstr}" $TEST_DIR/fsmap >> $seqres.full
- found=$(grep -E -c "${qstr}" $TEST_DIR/fsmap)
- test $found -eq 1 || echo "Unexpected output for offset ${offrange}."
-done
+if _xfs_is_realtime_file $SCRATCH_MNT/f1 && ! _xfs_has_feature $SCRATCH_MNT rtgroups; then
+ # file on rt volume
+ echo "Check f1 bmap and fsmap" | tee -a $seqres.full
+ cat $TEST_DIR/bmap | while read ext offrange colon rtblockrange total crap; do
+ qstr="^[[:space:]]*[0-9]*:[[:space:]]*[0-9]*:[0-9]*[[:space:]]*${rtblockrange} :[[:space:]]*${ino}[[:space:]]*${offrange}[[:space:]]*${total} 010[01]{4}$"
+ echo "${qstr}" >> $seqres.full
+ grep "${qstr}" $TEST_DIR/fsmap >> $seqres.full
+ found=$(grep -E -c "${qstr}" $TEST_DIR/fsmap)
+ test $found -eq 1 || echo "Unexpected output for offset ${offrange}."
+ done
+else
+ # file on data volume
+ echo "Check f1 bmap and fsmap" | tee -a $seqres.full
+ cat $TEST_DIR/bmap | while read ext offrange colon blockrange ag agrange total crap; do
+ qstr="^[[:space:]]*[0-9]*:[[:space:]]*[0-9]*:[0-9]*[[:space:]]*${blockrange} :[[:space:]]*${ino}[[:space:]]*${offrange}[[:space:]]*${ag}[[:space:]]*${agrange}[[:space:]]*${total} 010[01]{4}$"
+ echo "${qstr}" >> $seqres.full
+ grep "${qstr}" $TEST_DIR/fsmap >> $seqres.full
+ found=$(grep -E -c "${qstr}" $TEST_DIR/fsmap)
+ test $found -eq 1 || echo "Unexpected output for offset ${offrange}."
+ done
+fi

echo "Get f2 bmap" | tee -a $seqres.full
-$XFS_IO_PROG -c 'bmap -v' $SCRATCH_MNT/f2 >> $seqres.full
$XFS_IO_PROG -c 'bmap -v' $SCRATCH_MNT/f2 | grep '^[[:space:]]*[0-9]*:' | grep -v 'hole' | tr '[]()' ' ' > $TEST_DIR/bmap
+cat $TEST_DIR/bmap >> $seqres.full

-echo "Check f2 bmap and fsmap" | tee -a $seqres.full
-cat $TEST_DIR/bmap | while read ext offrange colon blockrange ag agrange total crap; do
- qstr="^[[:space:]]*[0-9]*:[[:space:]]*[0-9]*:[0-9]*[[:space:]]*${blockrange} :[[:space:]]*${ino}[[:space:]]*${offrange}[[:space:]]*${ag}[[:space:]]*${agrange}[[:space:]]*${total} 010[01]{4}$"
- echo "${qstr}" >> $seqres.full
- grep "${qstr}" $TEST_DIR/fsmap >> $seqres.full
- found=$(grep -E -c "${qstr}" $TEST_DIR/fsmap)
- test $found -eq 1 || echo "Unexpected output for offset ${offrange}."
-done
+if _xfs_is_realtime_file $SCRATCH_MNT/f2 && ! _xfs_has_feature $SCRATCH_MNT rtgroups; then
+ echo "Check f2 bmap and fsmap" | tee -a $seqres.full
+ cat $TEST_DIR/bmap | while read ext offrange colon rtblockrange total crap; do
+ qstr="^[[:space:]]*[0-9]*:[[:space:]]*[0-9]*:[0-9]*[[:space:]]*${rtblockrange} :[[:space:]]*${ino}[[:space:]]*${offrange}[[:space:]]*${total} 010[01]{4}$"
+ echo "${qstr}" >> $seqres.full
+ grep "${qstr}" $TEST_DIR/fsmap >> $seqres.full
+ found=$(grep -E -c "${qstr}" $TEST_DIR/fsmap)
+ test $found -eq 1 || echo "Unexpected output for offset ${offrange}."
+ done
+else
+ echo "Check f2 bmap and fsmap" | tee -a $seqres.full
+ cat $TEST_DIR/bmap | while read ext offrange colon blockrange ag agrange total crap; do
+ qstr="^[[:space:]]*[0-9]*:[[:space:]]*[0-9]*:[0-9]*[[:space:]]*${blockrange} :[[:space:]]*${ino}[[:space:]]*${offrange}[[:space:]]*${ag}[[:space:]]*${agrange}[[:space:]]*${total} 010[01]{4}$"
+ echo "${qstr}" >> $seqres.full
+ grep "${qstr}" $TEST_DIR/fsmap >> $seqres.full
+ found=$(grep -E -c "${qstr}" $TEST_DIR/fsmap)
+ test $found -eq 1 || echo "Unexpected output for offset ${offrange}."
+ done
+fi

# success, all done
status=0