Hi, Zorro
在 2021/1/30 19:12, Zorro Lang 写道:
On Thu, Jan 28, 2021 at 02:12:02PM +0800, Sun Ke wrote:
Fill the disk space, try to create some files and rename a file, mount
again, list directory contents and triggers some errors. It is a
regression test for kernel commit 6b4b8e6b4ad8 ("ext4: ext4: fix bug for
rename with RENAME_WHITEOUT")
Signed-off-by: Sun Ke <sunke32@xxxxxxxxxx>
---
v1 -> v3:
Use the original in src and modify 048.out
---
---
tests/ext4/048 | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/ext4/048.out | 2 ++
tests/ext4/group | 1 +
3 files changed, 79 insertions(+)
create mode 100755 tests/ext4/048
create mode 100644 tests/ext4/048.out
diff --git a/tests/ext4/048 b/tests/ext4/048
new file mode 100755
index 00000000..0311d1a2
--- /dev/null
+++ b/tests/ext4/048
@@ -0,0 +1,76 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2021 HUAWEI. All Rights Reserved.
+#
+# FS QA Test 048
+#
+# This is a regression test for kernel patch:
+# commit 6b4b8e6b4ad8 ("ext4: ext4: fix bug for rename with RENAME_WHITEOUT")
+
+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
+
+# real QA test starts here
+
+# Modify as appropriate.
+_supported_fs ext4
+_supported_fs generic
ext4 or generic? Tell the truth, according to below testing steps, I think it
can be a generic test case, not only for ext4.
+_require_scratch
+_require_xfs_io_command "falloc"
+
+dmesg -c > /dev/null
+
+_scratch_mkfs > $seqres.full 2>&1
+_scratch_mount >> $seqres.full 2>&1
+
+testdir=$SCRATCH_MNT
+cd ${testdir}
+
+mkdir test
+$XFS_IO_PROG -f -c "falloc 0 128M" img >> $seqres.full
+$MKFS_EXT4_PROG img > /dev/null 2>&1
+$MOUNT_PROG img test
Can we reproduce this bug by $SCRATCH_DEV directly, not through a loopdev.
Likes:
_scratch_mkfs_sized 128M (maybe bigger ?)
_scratch_mount
I tried this:
dev_size=$((128 * 1024 * 1024))
_scratch_mkfs_sized $dev_size >>$seqres.full 2>&1
_scratch_mount
But it do not reproduce this bug. Maybe it should through a loopdev.
+
+# fill the disk space
+dd if=/dev/zero of=test/foo bs=1M count=128 > /dev/null 2>&1
Can _fill_fs() helper help you that?
+
+# create 1000 files, not all the files will be created successfully
+mkdir test/dir
+cd test/dir
+for ((i = 0; i < 1000; i++))
+do
+ touch file$i > /dev/null 2>&1
+done
I don't know if it can be 100% sure there's at least 1 file will be created at
here, after you tried to fill the fs.
So I think maybe you can create a file with known name, then use _fill_fs()
to fill the whole fs. Then try to rename the file you know its name. Can that
reproduce the bug?
It can not repoduce the bug.
+
+# try to rename, but now no space left on device
+$here/src/renameat2 -w $testdir/test/dir/file1 $testdir/test/dir/dst_file
+
+cd $testdir
+$UMOUNT_PROG test
+$MOUNT_PROG img test
+ls -l test/dir/file1 > /dev/null 2>&1
+$UMOUNT_PROG test
+
+dmesg -c | grep "deleted inode referenced"
Can _check_dmesg_for() help you?
+# success, all done
+status=0
+exit
diff --git a/tests/ext4/048.out b/tests/ext4/048.out
new file mode 100644
index 00000000..5b3990da
--- /dev/null
+++ b/tests/ext4/048.out
@@ -0,0 +1,2 @@
+QA output created by 048
+No space left on device
diff --git a/tests/ext4/group b/tests/ext4/group
index ceda2ba6..6140dd7e 100644
--- a/tests/ext4/group
+++ b/tests/ext4/group
@@ -50,6 +50,7 @@
045 auto dir
046 auto prealloc quick
047 auto quick dax
+048 other
I think your test case is a general test case, "auto"and "rename" groups
are good to it, if it's quick enough, add "quick" group.
Maybe it is only ext4 test case, I think.
Thanks,
Sun Ke
271 auto rw quick
301 aio auto ioctl rw stress defrag
302 aio auto ioctl rw stress defrag
--
2.13.6
.