forked from pool/e2fsprogs
159 lines
4.9 KiB
Diff
159 lines
4.9 KiB
Diff
|
From 4ed27a5bb9bfabaf437b45aaad315f028da5a6f1 Mon Sep 17 00:00:00 2001
|
|||
|
From: Jan Kara <jack@suse.cz>
|
|||
|
Date: Thu, 13 Feb 2020 11:16:01 +0100
|
|||
|
Subject: [PATCH 4/5] tests: add test to excercise indexed directories with
|
|||
|
metadata_csum
|
|||
|
References: bsc#1160979
|
|||
|
|
|||
|
Indexed directories have somewhat different format when metadata_csum is
|
|||
|
enabled. Add test to excercise linking in indexed directories and e2fsck
|
|||
|
rehash code in this case.
|
|||
|
|
|||
|
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
|
|||
|
Signed-off-by: Jan Kara <jack@suse.cz>
|
|||
|
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|||
|
Acked-by: Jan Kara <jack@suse.cz>
|
|||
|
---
|
|||
|
tests/f_large_dir_csum/expect | 32 ++++++++++++++
|
|||
|
tests/f_large_dir_csum/is_slow_test | 0
|
|||
|
tests/f_large_dir_csum/name | 1 +
|
|||
|
tests/f_large_dir_csum/script | 84 +++++++++++++++++++++++++++++++++++++
|
|||
|
4 files changed, 117 insertions(+)
|
|||
|
create mode 100644 tests/f_large_dir_csum/expect
|
|||
|
create mode 100644 tests/f_large_dir_csum/is_slow_test
|
|||
|
create mode 100644 tests/f_large_dir_csum/name
|
|||
|
create mode 100644 tests/f_large_dir_csum/script
|
|||
|
|
|||
|
Index: e2fsprogs-1.43.8/tests/f_large_dir_csum/expect
|
|||
|
===================================================================
|
|||
|
--- /dev/null
|
|||
|
+++ e2fsprogs-1.43.8/tests/f_large_dir_csum/expect
|
|||
|
@@ -0,0 +1,32 @@
|
|||
|
+Creating filesystem with 30996 1k blocks and 64 inodes
|
|||
|
+Superblock backups stored on blocks:
|
|||
|
+ 8193, 24577
|
|||
|
+
|
|||
|
+Allocating group tables: done
|
|||
|
+Writing inode tables: done
|
|||
|
+Writing superblocks and filesystem accounting information: done
|
|||
|
+
|
|||
|
+Pass 1: Checking inodes, blocks, and sizes
|
|||
|
+Pass 2: Checking directory structure
|
|||
|
+Pass 3: Checking directory connectivity
|
|||
|
+Pass 3A: Optimizing directories
|
|||
|
+Pass 4: Checking reference counts
|
|||
|
+Inode 13 ref count is 1, should be 5. Fix? yes
|
|||
|
+
|
|||
|
+Pass 5: Checking group summary information
|
|||
|
+
|
|||
|
+test.img: ***** FILE SYSTEM WAS MODIFIED *****
|
|||
|
+test.img: 13/64 files (0.0% non-contiguous), 766/30996 blocks
|
|||
|
+Exit status is 1
|
|||
|
+Pass 1: Checking inodes, blocks, and sizes
|
|||
|
+Pass 2: Checking directory structure
|
|||
|
+Pass 3: Checking directory connectivity
|
|||
|
+Pass 3A: Optimizing directories
|
|||
|
+Pass 4: Checking reference counts
|
|||
|
+Inode 13 ref count is 5, should be 15499. Fix? yes
|
|||
|
+
|
|||
|
+Pass 5: Checking group summary information
|
|||
|
+
|
|||
|
+test.img: ***** FILE SYSTEM WAS MODIFIED *****
|
|||
|
+test.img: 13/64 files (0.0% non-contiguous), 5971/30996 blocks
|
|||
|
+Exit status is 1
|
|||
|
Index: e2fsprogs-1.43.8/tests/f_large_dir_csum/name
|
|||
|
===================================================================
|
|||
|
--- /dev/null
|
|||
|
+++ e2fsprogs-1.43.8/tests/f_large_dir_csum/name
|
|||
|
@@ -0,0 +1 @@
|
|||
|
+optimize 3 level htree directories with metadata checksums
|
|||
|
Index: e2fsprogs-1.43.8/tests/f_large_dir_csum/script
|
|||
|
===================================================================
|
|||
|
--- /dev/null
|
|||
|
+++ e2fsprogs-1.43.8/tests/f_large_dir_csum/script
|
|||
|
@@ -0,0 +1,84 @@
|
|||
|
+OUT=$test_name.log
|
|||
|
+EXP=$test_dir/expect
|
|||
|
+E2FSCK=../e2fsck/e2fsck
|
|||
|
+
|
|||
|
+NAMELEN=255
|
|||
|
+DIRENT_SZ=8
|
|||
|
+BLOCKSZ=1024
|
|||
|
+INODESZ=128
|
|||
|
+CSUM_SZ=8
|
|||
|
+CSUM_TAIL_SZ=12
|
|||
|
+DIRENT_PER_LEAF=$(((BLOCKSZ - CSUM_TAIL_SZ) / (NAMELEN + DIRENT_SZ)))
|
|||
|
+HEADER=32
|
|||
|
+INDEX_SZ=8
|
|||
|
+INDEX_L1=$(((BLOCKSZ - HEADER - CSUM_SZ) / INDEX_SZ))
|
|||
|
+INDEX_L2=$(((BLOCKSZ - DIRENT_SZ - CSUM_SZ) / INDEX_SZ))
|
|||
|
+DIRBLK=$((INDEX_L1 * INDEX_L2))
|
|||
|
+ENTRIES=$((DIRBLK * DIRENT_PER_LEAF / 3))
|
|||
|
+# directory leaf blocks - get twice as much because the leaves won't be full
|
|||
|
+# and there are also other filesystem blocks.
|
|||
|
+FSIZE=$((DIRBLK * 2))
|
|||
|
+
|
|||
|
+$MKE2FS -b 1024 -O extents,64bit,uninit_bg,metadata_csum -N 50 \
|
|||
|
+ -I $INODESZ -F $TMPFILE $FSIZE > $OUT.new 2>&1
|
|||
|
+RC=$?
|
|||
|
+if [ $RC -eq 0 ]; then
|
|||
|
+{
|
|||
|
+ # First some initial fs setup to create indexed dir
|
|||
|
+ echo "mkdir /foo"
|
|||
|
+ echo "cd /foo"
|
|||
|
+ touch $TMPFILE.tmp
|
|||
|
+ echo "write $TMPFILE.tmp foofile"
|
|||
|
+ i=0
|
|||
|
+ while test $i -lt $DIRENT_PER_LEAF ; do
|
|||
|
+ printf "ln foofile f%0254u\n" $i
|
|||
|
+ i=$((i + 1));
|
|||
|
+ done
|
|||
|
+ echo "expand ./"
|
|||
|
+ printf "ln foofile f%0254u\n" $i
|
|||
|
+} | $DEBUGFS -w $TMPFILE > /dev/null 2>> $OUT.new
|
|||
|
+ RC=$?
|
|||
|
+ # e2fsck should optimize the dir to become indexed
|
|||
|
+ $E2FSCK -yfD $TMPFILE >> $OUT.new 2>&1
|
|||
|
+ status=$?
|
|||
|
+ echo Exit status is $status >> $OUT.new
|
|||
|
+fi
|
|||
|
+
|
|||
|
+if [ $RC -eq 0 ]; then
|
|||
|
+{
|
|||
|
+ START=$SECONDS
|
|||
|
+ i=$(($DIRENT_PER_LEAF+1))
|
|||
|
+ last=$i
|
|||
|
+ echo "cd /foo"
|
|||
|
+ while test $i -lt $ENTRIES ; do
|
|||
|
+ ELAPSED=$((SECONDS - START))
|
|||
|
+ if test $((i % 5000)) -eq 0 -a $ELAPSED -gt 10; then
|
|||
|
+ RATE=$(((i - last) / ELAPSED))
|
|||
|
+ echo "$test_name: $i/$ENTRIES links, ${ELAPSED}s @ $RATE/s" >&2
|
|||
|
+ START=$SECONDS
|
|||
|
+ last=$i
|
|||
|
+ fi
|
|||
|
+ printf "ln foofile f%0254u\n" $i
|
|||
|
+ i=$((i + 1))
|
|||
|
+ done
|
|||
|
+} | $DEBUGFS -w $TMPFILE > /dev/null 2>> $OUT.new
|
|||
|
+ RC=$?
|
|||
|
+fi
|
|||
|
+
|
|||
|
+if [ $RC -eq 0 ]; then
|
|||
|
+ $E2FSCK -yfD $TMPFILE >> $OUT.new 2>&1
|
|||
|
+ status=$?
|
|||
|
+ echo Exit status is $status >> $OUT.new
|
|||
|
+ sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new > $OUT
|
|||
|
+ rm -f $OUT.new
|
|||
|
+
|
|||
|
+ cmp -s $OUT $EXP
|
|||
|
+ RC=$?
|
|||
|
+fi
|
|||
|
+if [ $RC -eq 0 ]; then
|
|||
|
+ echo "$test_name: $test_description: ok"
|
|||
|
+ touch $test_name.ok
|
|||
|
+else
|
|||
|
+ echo "$test_name: $test_description: failed"
|
|||
|
+ diff -u $EXP $OUT > $test_name.failed
|
|||
|
+fi
|