From patchwork Mon Oct 28 14:17:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 13853574 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 598FFD33989 for ; Mon, 28 Oct 2024 14:18:17 +0000 (UTC) Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1t5QZU-0002RL-I3; Mon, 28 Oct 2024 14:18:16 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1t5QZT-0002RE-65 for linux-f2fs-devel@lists.sourceforge.net; Mon, 28 Oct 2024 14:18:15 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=/qdHaSu2Q3IWe/vCCVSe9o0+LuvCt4tScu8rZk8X6eE=; b=lf/JrBw1cs7BxQlK3h0ktIksi4 S/43gQggjiX13A3AzfJpdmYvMmSsCBdbwaz/RAi+SuItD41GDr4Jux9ae4sJ7Vcq/ybeOes/gVbyZ uZHl6Nz92jrGwSo7mfSkJ8SEaqHKUAX8SzXdtKJCetx2XO8fpKK6IM0gKn9SegrfItCI=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:Message-Id:Date:Subject:Cc:To:From :Sender:Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post: List-Owner:List-Archive; bh=/qdHaSu2Q3IWe/vCCVSe9o0+LuvCt4tScu8rZk8X6eE=; b=N q3Q3BBz+zd8XUT2ru4HCgyrjxSMh7Vpl8KV9wtfdGQva7GsxLpEePtEmsItyNpS2un9e4q4TL8sr5 astW/O54NaF2hRsClHiqdV0OSbHeu+/VVXDnLeFU+hvqJC5ioV7CAxLqrqVumHWLuSn08abCpjCV/ h4BDcZKaukLJqqpE=; Received: from nyc.source.kernel.org ([147.75.193.91]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1t5QZS-00009F-DC for linux-f2fs-devel@lists.sourceforge.net; Mon, 28 Oct 2024 14:18:15 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 7CC05A42591; Mon, 28 Oct 2024 14:16:12 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 921EAC4CEC3; Mon, 28 Oct 2024 14:18:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1730125087; bh=jvqQdl9HZD/pH/4UAiAhbo9OsbYYJlAiRgfGwYEGkx4=; h=From:To:Cc:Subject:Date:From; b=PudvG3o2Xqd1/ze1jfS/MLnDdG1eCIMwWmKr8otq6bRjpgbayf+plQn48t0RzS4gr kFjAyX1WZjekmUHivtqfmaLN/gKoA2AMzNq/y4HyNxXOAAFJlxgni4REUdOu9/m/Bu eFkslIoO5Ysagg8PNqjT7XiKl5MHzUNic/i2Dg+fQh9QNaLurdu+YFh2H3UQwZeXZ+ Bs/7esRkNfuGZ0LC/Jhxt26TO3siqBZiahaaKGCPIlHL1Atu5CPQJbTPfO4oiHv4SH HcVjzvyHNG8+WIQ2qi+YWcZL+00lDA3cmr++h1GEzZMcVN2ANXP1h1gX4bX/Fe2CDP O6CelV1XQbbFw== To: Zorro Lang Date: Mon, 28 Oct 2024 22:17:59 +0800 Message-Id: <20241028141800.1788356-1-chao@kernel.org> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 X-Headers-End: 1t5QZS-00009F-DC Subject: [f2fs-dev] [PATCH v3 1/2] f2fs/006: add testcase to check out-of-space case X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Chao Yu via Linux-f2fs-devel From: Chao Yu Reply-To: Chao Yu Cc: Jaegeuk Kim , fstests@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net This is a regression test to check whether f2fs handles dirty data correctly when checkpoint is disabled, if lfs mode is on, it will trigger OPU for all overwritten data, this will cost free segments, so f2fs must account overwritten data as OPU data when calculating free space, otherwise, it may run out of free segments in f2fs' allocation function. If kernel config CONFIG_F2FS_CHECK_FS is on, it will cause system panic, otherwise, dd may encounter I/O error. Cc: Jaegeuk Kim Signed-off-by: Chao Yu --- v3: - explain more about behavior on kernel w/ different config - use _filter_scratch to filter $SCRATCH_MNT tests/f2fs/006 | 42 ++++++++++++++++++++++++++++++++++++++++++ tests/f2fs/006.out | 6 ++++++ 2 files changed, 48 insertions(+) create mode 100755 tests/f2fs/006 create mode 100644 tests/f2fs/006.out diff --git a/tests/f2fs/006 b/tests/f2fs/006 new file mode 100755 index 00000000..f9560b2b --- /dev/null +++ b/tests/f2fs/006 @@ -0,0 +1,42 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2024 Oppo. All Rights Reserved. +# +# FS QA Test No. f2fs/006 +# +# This is a regression test to check whether f2fs handles dirty +# data correctly when checkpoint is disabled, if lfs mode is on, +# it will trigger OPU for all overwritten data, this will cost +# free segments, so f2fs must account overwritten data as OPU +# data when calculating free space, otherwise, it may run out +# of free segments in f2fs' allocation function. If kernel config +# CONFIG_F2FS_CHECK_FS is on, it will cause system panic, otherwise, +# dd may encounter I/O error. +# +. ./common/preamble +_begin_fstest auto quick + +_fixed_by_kernel_commit xxxxxxxxxxxx \ + "f2fs: fix to account dirty data in __get_secs_required()" + +# Import common functions. +. ./common/filter + +_require_scratch +_scratch_mkfs_sized $((1024*1024*100)) >> $seqres.full + +# use mode=lfs to let f2fs always triggers OPU +_scratch_mount -o mode=lfs,checkpoint=disable:10%,noinline_dentry >> $seqres.full + +testfile=$SCRATCH_MNT/testfile + +dd if=/dev/zero of=$testfile bs=1M count=50 2>/dev/null + +# it may run out of free space of f2fs and hang kernel +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync +dd if=/dev/zero of=$testfile bs=1M count=50 conv=notrunc conv=fsync 2>&1 | _filter_scratch + +_scratch_remount checkpoint=enable + +status=0 +exit diff --git a/tests/f2fs/006.out b/tests/f2fs/006.out new file mode 100644 index 00000000..2dc9efda --- /dev/null +++ b/tests/f2fs/006.out @@ -0,0 +1,6 @@ +QA output created by 006 +50+0 records in +50+0 records out +dd: error writing 'SCRATCH_MNT/testfile': No space left on device +3+0 records in +2+0 records out From patchwork Mon Oct 28 14:18:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 13853575 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B8DB1D3398B for ; Mon, 28 Oct 2024 14:18:24 +0000 (UTC) Received: from [127.0.0.1] (helo=sfs-ml-3.v29.lw.sourceforge.com) by sfs-ml-3.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1t5QZc-0006VH-40; Mon, 28 Oct 2024 14:18:23 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-3.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1t5QZa-0006V9-Fm for linux-f2fs-devel@lists.sourceforge.net; Mon, 28 Oct 2024 14:18:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=efZzDbJh40Eyo/1/ejbv8h7jUIbn76oQDePjYMYlbsg=; b=ljABHGo4VDCXoPXFy3fxNi3AhW t/Y8RaywmTByPjHRGqaOjcAoxrVZi0SvEQkrrfTPGDrLrg+g9JzOQd3CPRid/mP8+1Vt0VuanUZJ6 +EUnH7XVglQ/LTBjD2cE11g7f6t4eEn4KOGxkCh3+eg+pUJ/WJfoxZNIrHrkYfnD6AmY=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=efZzDbJh40Eyo/1/ejbv8h7jUIbn76oQDePjYMYlbsg=; b=kj8IHaV+AO6ErdJaulKthLH05d P+Tun0XPOhcheHIm9JnoIBQKCbaAl8vCVtuJ8P+XFTUioIwy24P6NW+aciVOnUxmp2FbmYGLk3zRb bZ5xtYf3L9uxAiYAB53+rwrtd8VNYC+Y/LMuL1kxSmAjem9LlRaNGeka/Tp1WvX60BGo=; Received: from nyc.source.kernel.org ([147.75.193.91]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1t5QZY-0000A3-WD for linux-f2fs-devel@lists.sourceforge.net; Mon, 28 Oct 2024 14:18:21 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 319AEA42593; Mon, 28 Oct 2024 14:16:14 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5CB01C4CECD; Mon, 28 Oct 2024 14:18:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1730125089; bh=pexBdKDgTINKrNIruMOIrMyMh+9Vaidlv8kP7M2pspg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AuZuJ2g/FgHXHw5HxA3KZG2gTkJB9mCzpt933hoIW0eDFxN7dHNPTP+te4W6PQDZu 7T/ikKiTa4Lj/oefDGVZLGKXtQavEWy/i5GMexaoZsSZiC9+nkfau5u3ew6cmtnciw qOHloyh1ZxQTlEeK5tl1YwSilEX5r8f14dVhr6KDmFTKpIpDhFw7kSPJrYm/M0gVhL QPMGebX3oX4ecDEspRr2z413uu3LFQQsPLSAceAKT09v5mTOZKrb+TuvbITTCxXF5J 5fBGh+Sx6CUEN19AxeHdGds0bXttE2SltIamBh1EtFVokQsA6GqNDUPwPD2XSl8lck iDoxGmdtMIJhA== To: Zorro Lang Date: Mon, 28 Oct 2024 22:18:00 +0800 Message-Id: <20241028141800.1788356-2-chao@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20241028141800.1788356-1-chao@kernel.org> References: <20241028141800.1788356-1-chao@kernel.org> MIME-Version: 1.0 X-Headers-End: 1t5QZY-0000A3-WD Subject: [f2fs-dev] [PATCH v3 2/2] f2fs/007: add testcase to check consistency of compressed inode metadata X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Chao Yu via Linux-f2fs-devel From: Chao Yu Reply-To: Chao Yu Cc: Jaegeuk Kim , Qi Han , fstests@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net 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 Signed-off-by: Chao Yu Reviewed-by: Zorro Lang --- v3: - move _require_scratch before use of $SCRATCH_MNT - output message before _check_scratch_fs tests/f2fs/007 | 108 +++++++++++++++++++++++++++++++++++++++++++++ tests/f2fs/007.out | 16 +++++++ 2 files changed, 124 insertions(+) create mode 100755 tests/f2fs/007 create mode 100644 tests/f2fs/007.out diff --git a/tests/f2fs/007 b/tests/f2fs/007 new file mode 100755 index 00000000..805d88fa --- /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 repaire 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 00000000..a4b76300 --- /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