From: Qu Wenruo Date: Thu, 17 Nov 2016 02:06:48 +0000 (+0800) Subject: fstests: Introduce check for explicit SHARED extent flag reporting X-Git-Tag: v2022.05.01~2295 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=083ff5827b603f2d646d20a20086fa55aa89b1c1;p=users%2Fhch%2Fxfstests-dev.git fstests: Introduce check for explicit SHARED extent flag reporting For fs support reflink, some of them (OK, btrfs again) doesn't split SHARED flag for extent fiemap reporting. For example: 0 4K 8K / File1: Extent 0 \ / \ |<- On disk Extent-->| | / | File2 / Extent: 0 Fs supports explicit SHARED extent reporting should report fiemap like: File1: 2 extents Extent 0-4K: SHARED Extent 4-8K: File2: 1 extents Extent 0-4K: SHARED Fs doesn't support explicit reporting will report fiemap like: File1: 1 extent Extent 0-8K: SHARED File2: 1 extent Extent 0-4K: SHARED Test case like generic/372 require explicit reporting will cause false alert on btrfs. Add such runtime check for that requirememt. Signed-off-by: Qu Wenruo Reviewed-by: Eryu Guan Signed-off-by: Eryu Guan --- diff --git a/common/reflink b/common/reflink index 8b3404620..9d51729b1 100644 --- a/common/reflink +++ b/common/reflink @@ -78,6 +78,50 @@ _require_scratch_reflink() _scratch_unmount } +# this test requires scratch fs to report explicit SHARED flag +# e.g. +# 0 4K 8K +# / File1: Extent 0 \ +# / \ +# |<- On disk Extent-->| +# | / +# | File2 / +# Extent: 0 +# Fs supports explicit SHARED extent reporting should report fiemap like: +# File1: 2 extents +# Extent 0-4K: SHARED +# Extent 4-8K: +# File2: 1 extents +# Extent 0-4K: SHARED +# +# Fs doesn't support explicit reporting will report fiemap like: +# File1: 1 extent +# Extent 0-8K: SHARED +# File2: 1 extent +# Extent 0-4K: SHARED +_require_scratch_explicit_shared_extents() +{ + _require_scratch + _require_fiemap + _require_scratch_reflink + _require_xfs_io_command "reflink" + local nr_extents + + _scratch_mkfs > /dev/null + _scratch_mount + + _pwrite_byte 0x61 0 128k $SCRATCH_MNT/file1 >/dev/null + _reflink_range $SCRATCH_MNT/file1 0 $SCRATCH_MNT/file2 0 64k >/dev/null + + _scratch_cycle_mount + + nr_extents=$(_count_extents $SCRATCH_MNT/file1) + if [ $nr_extents -eq 1 ]; then + _notrun "Explicit SHARED flag reporting not support by filesystem type: $FSTYP" + fi + _scratch_unmount +} + # this test requires the test fs support dedupe... _require_test_dedupe() { diff --git a/tests/generic/372 b/tests/generic/372 index 31dff2011..51a3eca7f 100755 --- a/tests/generic/372 +++ b/tests/generic/372 @@ -47,6 +47,7 @@ _supported_os Linux _supported_fs generic _require_scratch_reflink _require_fiemap +_require_scratch_explicit_shared_extents echo "Format and mount" _scratch_mkfs > $seqres.full 2>&1