diff mbox

generic: add fiemap test that does prealloc

Message ID 1432055622-8638-1-git-send-email-jbacik@fb.com (mailing list archive)
State New, archived
Headers show

Commit Message

Josef Bacik May 19, 2015, 5:13 p.m. UTC
I noticed that btrfs wasn't setting unwritten on prealloc test, and then
subsequently noticed that we weren't testing fiemap on prealloc extents with the
fiemap-tester.  This patch adds another test that does the same as generic/225
only with prealloc enabled.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
---
 tests/generic/328     | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/generic/328.out |  3 ++
 tests/generic/group   |  1 +
 3 files changed, 82 insertions(+)
 create mode 100644 tests/generic/328
 create mode 100644 tests/generic/328.out

Comments

Dave Chinner May 26, 2015, 1:31 a.m. UTC | #1
On Tue, May 19, 2015 at 01:13:42PM -0400, Josef Bacik wrote:
> I noticed that btrfs wasn't setting unwritten on prealloc test, and then
> subsequently noticed that we weren't testing fiemap on prealloc extents with the
> fiemap-tester.  This patch adds another test that does the same as generic/225
> only with prealloc enabled.  Thanks,

Fails on XFS, but that's because XFS is doing things fiemap-tester
does not understand (speculative prealloc beyond EOF when appending
writes occur on files larger than 64k) and hence XFS ends up with
zeroed data on disk in places where fiemaptester is expecting
preallocated blocks.

i.e. there's not data corruption, and nothing wrong with XFS's
behaioviour, just a broken assumption that the filesystem will lay
out data due to buffered writes and delayed allocation exactly as it
expects.

IOWs, i think that fiemap-tester might need to direct IO to get the
results it expects, not buffered IO...

> +_scratch_mount > /dev/null 2>&1
> +
> +rm -f $seqres.full
> +fiemapfile=$SCRATCH_MNT/$seq.fiemap
> +fiemaplog=$SCRATCH_MNT/$seq.log

The log file to use for debug information is $seqres.full.

Cheers,

Dave.
Josef Bacik May 26, 2015, 1:58 p.m. UTC | #2
On 05/25/2015 09:31 PM, Dave Chinner wrote:
> On Tue, May 19, 2015 at 01:13:42PM -0400, Josef Bacik wrote:
>> I noticed that btrfs wasn't setting unwritten on prealloc test, and then
>> subsequently noticed that we weren't testing fiemap on prealloc extents with the
>> fiemap-tester.  This patch adds another test that does the same as generic/225
>> only with prealloc enabled.  Thanks,
>
> Fails on XFS, but that's because XFS is doing things fiemap-tester
> does not understand (speculative prealloc beyond EOF when appending
> writes occur on files larger than 64k) and hence XFS ends up with
> zeroed data on disk in places where fiemaptester is expecting
> preallocated blocks.
>
> i.e. there's not data corruption, and nothing wrong with XFS's
> behaioviour, just a broken assumption that the filesystem will lay
> out data due to buffered writes and delayed allocation exactly as it
> expects.
>
> IOWs, i think that fiemap-tester might need to direct IO to get the
> results it expects, not buffered IO...
>

Huh crap I thought I caught this case, but now I look at it I only 
caught it for the HOLE case not the PREALLOC case, so I'll fix up the 
tester to check if there's 0's where there should be a prealloc.

>> +_scratch_mount > /dev/null 2>&1
>> +
>> +rm -f $seqres.full
>> +fiemapfile=$SCRATCH_MNT/$seq.fiemap
>> +fiemaplog=$SCRATCH_MNT/$seq.log
>
> The log file to use for debug information is $seqres.full.
>

I'll fix it up, thanks,

Josef

--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/tests/generic/328 b/tests/generic/328
new file mode 100644
index 0000000..b6d6917
--- /dev/null
+++ b/tests/generic/328
@@ -0,0 +1,78 @@ 
+#! /bin/bash
+# FS QA Test No. 328
+#
+# Run the fiemap (file extent mapping) tester with preallocation enabled
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2009 Eric Sandeen.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#-----------------------------------------------------------------------
+#
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=tmp/$$
+status=1  # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_xfs_io_command "fiemap"
+_require_xfs_io_command "falloc"
+
+_scratch_mkfs > /dev/null 2>&1
+_scratch_mount > /dev/null 2>&1
+
+rm -f $seqres.full
+fiemapfile=$SCRATCH_MNT/$seq.fiemap
+fiemaplog=$SCRATCH_MNT/$seq.log
+
+[ -x $here/src/fiemap-tester ] || _notrun "fiemap-tester not built"
+
+seed=`date +%s`
+
+echo "using seed $seed" >> $fiemaplog
+
+echo "fiemap run with sync"
+$here/src/fiemap-tester -q -S -s $seed -r 200 $fiemapfile 2>&1 | tee -a $fiemaplog
+
+if [ $? -ne 0 ]; then
+	if grep -q "Operation not supported" $fiemaplog; then
+	      _notrun "FIEMAP not supported by this filesystem type: $FSTYP"
+	fi
+	status=$?
+	exit
+fi
+
+echo "fiemap run without sync"
+$here/src/fiemap-tester -q -s $seed -r 200 $fiemapfile 2>&1 | tee -a $fiemaplog
+
+status=0
+exit
diff --git a/tests/generic/328.out b/tests/generic/328.out
new file mode 100644
index 0000000..a8f052a
--- /dev/null
+++ b/tests/generic/328.out
@@ -0,0 +1,3 @@ 
+QA output created by 328
+fiemap run with sync
+fiemap run without sync
diff --git a/tests/generic/group b/tests/generic/group
index 09bf1a5..3024cd5 100644
--- a/tests/generic/group
+++ b/tests/generic/group
@@ -194,3 +194,4 @@ 
 325 auto quick data log
 326 auto log
 327 auto quick
+328 auto quick prealloc