From patchwork Wed Oct 23 08:16:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 13846663 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 4D8A2D2E01E for ; Wed, 23 Oct 2024 08:16:20 +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 1t3WXU-0005cn-1a; Wed, 23 Oct 2024 08:16:19 +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 1t3WXS-0005cf-VM for linux-f2fs-devel@lists.sourceforge.net; Wed, 23 Oct 2024 08:16:18 +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=rCNYRvlYkvY5vRL4YRY/vbYLlk4ggqUHF9qx9xsQjrc=; b=NFqVvttS/HV5xcn++FIjfKwmmX twmYq+ti8mjI/hBSyiu4pyH6S9QkOc3xmpGixy087QA79PCZnn2V5v/JZET94aN6AO7kfAB3VZAPc xdnfAo2qJ2dqPAbkaEj7NPzJDM01GtGGnan2fqXPSLL2wVUak4gXCIDYOayYdjUhZc38=; 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=rCNYRvlYkvY5vRL4YRY/vbYLlk4ggqUHF9qx9xsQjrc=; b=b qMjB46oN6/RbgzAn/OCkkxRqw6odmw312313DnKWcnajw2PKCnT7cocqvGfE8uGNEySo87CGGriHZ rOe87ZLBwbVCO0i2/35JRD193tSJ+3/uFq46jUVQGljyNYRCdc09WkQvvv4UhvGit/9XcCyKC3EaT 42zbKfMazP2hX1sE=; Received: from dfw.source.kernel.org ([139.178.84.217]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1t3WXR-0003cK-NM for linux-f2fs-devel@lists.sourceforge.net; Wed, 23 Oct 2024 08:16:18 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id B88B05C5E6F; Wed, 23 Oct 2024 08:16:07 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8BC91C4CEC6; Wed, 23 Oct 2024 08:16:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1729671372; bh=KH/gWcSQ5ANQNjmXmGKqkINjKdTgHSCalEu+VVxzM4U=; h=From:To:Cc:Subject:Date:From; b=eJBPCmufUaeUA2pqPon5iP/uBjut/5s5logH6swRmeABCtLh+2XNyR0kmB+tTMK4B a2hij41IONX97f5t1YyI6A2/ajXMV5sNDZ/UVxkNmiU33IRBm/F+Sd6lhXSNx0b37R e51lTXe9zebFAkt1W6amt8GgQje95Ndbg4Zv0NLjg8W79pwbAbhXCwojYfuaokqnCX i/L5QUg152mBhdsgmjHXz0GSRvHR8IX+N96Xp2tWHwRGAaOZUr0QGae/lDYEXEUr5v dT/+5KyOAr0isPrsbfXtirFa1Z0gopD8u5iBTSthmCF8cY6SudLjL/O40m/wnYHTFj N20hTvUV2Wrqg== To: Zorro Lang Date: Wed, 23 Oct 2024 16:16:01 +0800 Message-Id: <20241023081602.3806579-1-chao@kernel.org> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 X-Headers-End: 1t3WXR-0003cK-NM Subject: [f2fs-dev] [PATCH v2 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, resulting in panic. Cc: Jaegeuk Kim Signed-off-by: Chao Yu --- v2: - add _fixed_by_kernel_commit() - use _scratch_mkfs_sized() rather than formating size-specified loop device - code cleanup tests/f2fs/006 | 38 ++++++++++++++++++++++++++++++++++++++ tests/f2fs/006.out | 6 ++++++ 2 files changed, 44 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..63d00018 --- /dev/null +++ b/tests/f2fs/006 @@ -0,0 +1,38 @@ +#! /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, resulting in +# panic. +# +. ./common/preamble +_begin_fstest auto quick + +_fixed_by_kernel_commit xxxxxxxxxxxx \ + "f2fs: fix to account dirty data in __get_secs_required()" + +testfile=$SCRATCH_MNT/testfile + +_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 + +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 + +_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..0d7b3910 --- /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 '/mnt/scratch_f2fs/testfile': No space left on device +3+0 records in +2+0 records out From patchwork Wed Oct 23 08:16:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 13846664 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 723E6D2E021 for ; Wed, 23 Oct 2024 08:16:27 +0000 (UTC) Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1t3WXb-0008KT-28; Wed, 23 Oct 2024 08:16:27 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1t3WXa-0008KI-4V for linux-f2fs-devel@lists.sourceforge.net; Wed, 23 Oct 2024 08:16:26 +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=of1MI47wCja644OgQOb+mTDmo5hRD6gH/ChcvlQyF5g=; b=bQfM/+xCVjtlHrmFziDcjMZEZT sqvHTBwTYiqs1lQhxEzhcEIS0ap7v1+aDu/6nmSX3RLsX53XMxz2234SllcK4lsgRXMLjyUQQmoMN ijRIiPvjvwYtW3NkuUhKESXqsRtFJ5LXtTXTgENhAsoIcTXqLNbJHkiGfc7kcZsYvECY=; 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=of1MI47wCja644OgQOb+mTDmo5hRD6gH/ChcvlQyF5g=; b=PUH3b3A/0oEZxbuY4IKwLcTieF K8WDc4ring8tyKp7XKWxULaDzMBd29xKyg5hKEHv6bjuz9mRq+D24hN3zpB5/3GtGOdwCmTjh0kqn HvNPv2088NeCHV6+B8311rmVMuSAWA/EU6cTDrd9SR/+MiUPB+IJUdfUPLS0buGsJp60=; 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 1t3WXZ-0003dT-36 for linux-f2fs-devel@lists.sourceforge.net; Wed, 23 Oct 2024 08:16:25 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 36341A44B9E; Wed, 23 Oct 2024 08:16:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 749DBC4CECD; Wed, 23 Oct 2024 08:16:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1729671374; bh=ny96yE+u0tbc540OPl+68cxi48B5XhGbATbld3m9Zf0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aO68x6puPuyvAX9fExYgnnr6gVbl2DVv/nNC+5LVHw2aStd4sbDJTF0KNG74H8xmG CmM/TcCTc1t7sOEVjNnvKnpSwkpYb+gbPT8t9EGfuTsQQQavPKBFa6+4exFZ79WW1+ GJf53si/dnz9lAMfl/hI9oKr7LJX5prZn2GSJPyq03/UJJmrSVgzun5kFDXqVb4C1g 4J4XW6pnGPLU/TUe48t9S1udOLJbykh7oI5tpdnekA1Iy/NeKn44DLNqeB9dVSYRzm rnmFbt3mEPOXOKnxZVfv4Yg48cO8wPhwS84OUIhlTUTGax1zLuGwyjKVcWKqDpoXz1 k5y9NybdiSNxw== To: Zorro Lang Date: Wed, 23 Oct 2024 16:16:02 +0800 Message-Id: <20241023081602.3806579-2-chao@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20241023081602.3806579-1-chao@kernel.org> References: <20241023081602.3806579-1-chao@kernel.org> MIME-Version: 1.0 X-Headers-End: 1t3WXZ-0003dT-36 Subject: [f2fs-dev] [PATCH v2 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 --- v2: - add _fixed_by_kernel_commit() - code cleanup - add error handling for _scratch_mkfs() tests/f2fs/007 | 116 +++++++++++++++++++++++++++++++++++++++++++++ tests/f2fs/007.out | 4 ++ 2 files changed, 120 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..8979c21c --- /dev/null +++ b/tests/f2fs/007 @@ -0,0 +1,116 @@ +#! /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" + +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 + _check_scratch_fs + if [ $? -ne 0 ]; then + _fail "filesystem becomes corrupted after compress" + fi + + _scratch_mount >> $seqres.full + $F2FS_IO_PROG release_cblocks $testfile >> $seqres.full + _scratch_unmount + + # 2. check after releasement + _check_scratch_fs + if [ $? -ne 0 ]; then + _fail "filesystem becomes corrupted after release_cblocks" + fi + + _scratch_mount >> $seqres.full + $F2FS_IO_PROG reserve_cblocks $testfile >> $seqres.full + _scratch_unmount + + # 3. check after rservation + _check_scratch_fs + if [ $? -ne 0 ]; then + _fail "filesystem becomes corrupted after reserve_cblocks" + fi + + _scratch_mount "-o compress_mode=user" >> $seqres.full + $F2FS_IO_PROG decompress $testfile >> $seqres.full + _scratch_unmount + + # 4. check after decompression + _check_scratch_fs + if [ $? -ne 0 ]; then + _fail "filesystem becomes corrupted after decompress" + fi +done + +status=0 +exit diff --git a/tests/f2fs/007.out b/tests/f2fs/007.out new file mode 100644 index 00000000..2ea71c18 --- /dev/null +++ b/tests/f2fs/007.out @@ -0,0 +1,4 @@ +QA output created by 007 +compression ratio is: 64 / 256 +compression ratio is: 128 / 256 +compression ratio is: 192 / 256