fstests.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] ext4/046: Add test to verify unwritten extent conversion in buff-io
@ 2020-10-09 11:42 Ritesh Harjani
  2020-10-11  6:11 ` Eryu Guan
  0 siblings, 1 reply; 3+ messages in thread
From: Ritesh Harjani @ 2020-10-09 11:42 UTC (permalink / raw)
  To: fstests; +Cc: tytso, jack, anju, aneesh.kumar, Ritesh Harjani

There was an issue where with with filesize > 4G, map.m_lblk
was getting overflow in buff-IO path while converting unwritten to
written extent with dioread_nolock mount option with bs < ps.
Adding a testcase for the same.
This test doesn't force any explicit mount option within the test,
as it will be set anyway along with test config, although it does
force for blocksize < pagesize config (as this test is specific to
that). Patch at [1] fixes the issue.

[1]: https://patchwork.ozlabs.org/patch/1378632

Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>
---
 tests/ext4/046     | 101 +++++++++++++++++++++++++++++++++++++++++++++
 tests/ext4/046.out |   2 +
 tests/ext4/group   |   1 +
 3 files changed, 104 insertions(+)
 create mode 100755 tests/ext4/046
 create mode 100644 tests/ext4/046.out

diff --git a/tests/ext4/046 b/tests/ext4/046
new file mode 100755
index 000000000000..49de6bbb2c89
--- /dev/null
+++ b/tests/ext4/046
@@ -0,0 +1,101 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 IBM Corporation. All Rights Reserved.
+#
+# FS QA Test No. generic/046
+#
+# Test writes to falloc file with filesize > 4GB and make sure to verify
+# the file checksum both before and after mount.
+# This test is to check whether unwritten extents gets properly converted
+# to written extent on a filesystem with bs < ps.
+#
+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
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# Modify as appropriate.
+_supported_fs ext4
+_supported_os Linux
+_require_scratch
+_require_xfs_io_command "falloc"
+
+# keep 4k as a blksz for 64k pagesz
+pagesz=$(getconf PAGE_SIZE)
+if [ $pagesz -eq 65536 ]; then
+	blksz=4096
+else
+	blksz=$(($pagesz/4))
+fi
+
+devsize=`blockdev --getsize64 $SCRATCH_DEV`
+if [ $devsize -lt 6442450944 ]; then
+	_notrun "Too small scratch device, need at least 6G"
+fi
+
+# Test for bs < ps
+export MKFS_OPTIONS="-F -b $blksz"
+_scratch_mkfs >> $seqres.full 2>&1
+_scratch_mount >> $seqres.full 2>&1
+
+# check blksz
+real_blksz=$(_get_file_block_size $SCRATCH_MNT)
+test $real_blksz != $blksz && _notrun "Failed to format with small blocksize."
+
+testfile=$SCRATCH_MNT/testfile-$seq
+
+# Fallocate testfile with size > 4G
+fsize=$((5 * 1024 * 1024 * 1024))
+$XFS_IO_PROG -f -c "falloc 0 $fsize" $testfile >> $seqres.full 2>&1
+
+# First write at offset < 4G (at few alternative blks)
+off=$((3 * 1024 * 1024 * 1024))
+for i in 1 2 3 4; do
+	$XFS_IO_PROG -f \
+		-c "pwrite $off $blksz" \
+		$testfile >> $seqres.full 2>&1
+	off=$(($off + (2*$blksz)))
+done
+
+# Then write at offset > 4G (at few alternative blks) to check
+# any 32bit overflow case in map.m_lblk
+off=$((4 * 1024 * 1024 * 1024))
+for i in 1 2 3 4; do
+	$XFS_IO_PROG -f \
+		-c "pwrite $off $blksz" \
+		$testfile >> $seqres.full 2>&1
+	off=$(($off + (2*$blksz)))
+done
+
+# ==== Pre-Remount ===
+md5_pre=`md5sum $testfile | cut -d' ' -f1`
+echo "Pre-Remount md5sum of $testfile = $md5_pre" >> $seqres.full
+
+_scratch_cycle_mount
+
+# ==== Post-Remount ===
+md5_post=`md5sum $testfile | cut -d' ' -f1`
+echo "Post-Remount md5sum of $testfile = $md5_post" >> $seqres.full
+test $md5_pre != $md5_post && echo "md5sum mismatch"
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/ext4/046.out b/tests/ext4/046.out
new file mode 100644
index 000000000000..52c445eb70bb
--- /dev/null
+++ b/tests/ext4/046.out
@@ -0,0 +1,2 @@
+QA output created by 046
+Silence is golden
diff --git a/tests/ext4/group b/tests/ext4/group
index 40351fd9ca0c..02a499a9d220 100644
--- a/tests/ext4/group
+++ b/tests/ext4/group
@@ -48,6 +48,7 @@
 043 auto quick
 044 auto quick
 045 auto dir
+046 auto quick
 271 auto rw quick
 301 aio auto ioctl rw stress defrag
 302 aio auto ioctl rw stress defrag
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-10-12  4:17 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-09 11:42 [PATCH 1/1] ext4/046: Add test to verify unwritten extent conversion in buff-io Ritesh Harjani
2020-10-11  6:11 ` Eryu Guan
2020-10-12  4:16   ` Ritesh Harjani

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).