From: Chao Yu Date: Tue, 29 Oct 2024 10:26:44 +0000 (+0800) Subject: f2fs/007: add testcase to check consistency of compressed inode metadata X-Git-Tag: xfs-zoned-2024-12-09~129 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=7838e3082b15354323f29efbcf6380dddb11a751;p=users%2Fhch%2Fxfstests-dev.git f2fs/007: add testcase to check consistency of compressed inode metadata metadata of compressed inode should always be consistent after file compression, reservation, releasement and decompression, let's add a testcase to check it. Cc: Jaegeuk Kim Cc: Qi Han Reviewed-by: Zorro Lang Signed-off-by: Chao Yu Signed-off-by: Zorro Lang --- diff --git a/tests/f2fs/007 b/tests/f2fs/007 new file mode 100755 index 000000000..6451d4b4f --- /dev/null +++ b/tests/f2fs/007 @@ -0,0 +1,108 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2024 Oppo. All Rights Reserved. +# +# FS QA Test No. f2fs/007 +# +# This is a regression test to check whether compressed metadata +# can become inconsistent after file compression, reservation +# releasement, and decompression. +# +. ./common/preamble +_begin_fstest auto quick rw compress + +_fixed_by_kernel_commit xxxxxxxxxxxx \ + "f2fs: compress: fix inconsistent update of i_blocks in release_compress_blocks and reserve_compress_blocks" + +_require_scratch +testfile_prefix=$SCRATCH_MNT/testfile +fio_config=$tmp.fio + +cat >$fio_config <> $seqres.full || _fail "mkfs failed" +_scratch_mount "-o compress_mode=user,compress_extension=*" >> $seqres.full + +echo -e "Run fio to initialize file w/ specified compress ratio" >> $seqres.full +cat $fio_config >> $seqres.full +$FIO_PROG $fio_config >> $seqres.full +_scratch_unmount + +# force to repair if filesystem is corrupted +export FSCK_OPTIONS="-f $FSCK_OPTIONS" + +for i in 30 60 90; do + testfile=$testfile_prefix$i + + _scratch_mount "-o compress_mode=user" >> $seqres.full + $F2FS_IO_PROG compress $testfile >> $seqres.full + cblocks=`$F2FS_IO_PROG get_cblocks $testfile` + echo "compression ratio is: "$cblocks" / 256" + + _scratch_unmount + + # 1. check after compression + echo "check fs after compress" + _check_scratch_fs + + _scratch_mount >> $seqres.full + $F2FS_IO_PROG release_cblocks $testfile >> $seqres.full + _scratch_unmount + + # 2. check after releasement + echo "check fs after release_cblocks" + _check_scratch_fs + + _scratch_mount >> $seqres.full + $F2FS_IO_PROG reserve_cblocks $testfile >> $seqres.full + _scratch_unmount + + # 3. check after rservation + echo "check fs after reserve_cblocks" + _check_scratch_fs + + _scratch_mount "-o compress_mode=user" >> $seqres.full + $F2FS_IO_PROG decompress $testfile >> $seqres.full + _scratch_unmount + + # 4. check after decompression + echo "check fs after decompress" + _check_scratch_fs +done + +status=0 +exit diff --git a/tests/f2fs/007.out b/tests/f2fs/007.out new file mode 100644 index 000000000..a4b763001 --- /dev/null +++ b/tests/f2fs/007.out @@ -0,0 +1,16 @@ +QA output created by 007 +compression ratio is: 64 / 256 +check fs after compress +check fs after release_cblocks +check fs after reserve_cblocks +check fs after decompress +compression ratio is: 128 / 256 +check fs after compress +check fs after release_cblocks +check fs after reserve_cblocks +check fs after decompress +compression ratio is: 192 / 256 +check fs after compress +check fs after release_cblocks +check fs after reserve_cblocks +check fs after decompress