[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-xfs
Subject: [PATCH 4/4] generic/303: avoid test failures on weird rt extent sizes
From: "Darrick J. Wong" <djwong () kernel ! org>
Date: 2022-12-30 22:20:53
Message-ID: 167243885324.740527.2775632077491737501.stgit () magnolia
[Download RAW message or body]
From: Darrick J. Wong <djwong@kernel.org>
Fix this test to skip the high offset reflink test if (on XFS) the rt
extent size isn't congruent with the chosen target offset.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
common/rc | 23 +++++++++++++++++++++++
tests/generic/303 | 8 +++++++-
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/common/rc b/common/rc
index cfe765de2e..3c30a444fe 100644
--- a/common/rc
+++ b/common/rc
@@ -4488,6 +4488,29 @@ _get_file_block_size()
esac
}
+_test_congruent_file_oplen()
+{
+ local file="$1"
+ local alloc_unit=$(_get_file_block_size "$file")
+ local oplen="$2"
+
+ case $FSTYP in
+ nfs*|cifs|9p|virtiofs|ceph|glusterfs|overlay|pvfs2)
+ # Network filesystems don't know about (or tell the client
+ # about) the underlying file allocation unit and they generally
+ # pass the file IO request to the underlying filesystem, so we
+ # don't have anything to check here.
+ return
+ ;;
+ esac
+
+ if [ $alloc_unit -gt $oplen ]; then
+ return 1
+ fi
+ test $((oplen % alloc_unit)) -eq 0 || return 1
+ return 0
+}
+
# Given a file path and a byte length of a file operation under test, ensure
# that the length is an integer multiple of the file's allocation unit size.
# In other words, skip the test unless (oplen ≡ alloc_unit mod 0). This is
diff --git a/tests/generic/303 b/tests/generic/303
index 95679569e4..ef88d2357b 100755
--- a/tests/generic/303
+++ b/tests/generic/303
@@ -48,7 +48,13 @@ echo "Reflink past maximum file size in dest file (should fail)"
_reflink_range $testdir/file1 0 $testdir/file5 4611686018427322368 $len >> $seqres.full
echo "Reflink high offset to low offset"
-_reflink_range $testdir/file1 $bigoff_64k $testdir/file6 1048576 65535 >> $seqres.full
+oplen=1048576
+if _test_congruent_file_oplen $testdir $oplen; then
+ _reflink_range $testdir/file1 $bigoff_64k $testdir/file6 $oplen 65535 >> $seqres.full
+else
+ # If we can't do the ficlonerange test, fake it in the output file
+ $XFS_IO_PROG -f -c 'pwrite -S 0x61 1114110 1' $testdir/file6 >> $seqres.full
+fi
echo "Reflink past source file EOF (should fail)"
_reflink_range $testdir/file2 524288 $testdir/file7 0 1048576 >> $seqres.full
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic