From patchwork Thu Dec 28 01:36:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhihao Cheng X-Patchwork-Id: 1880642 X-Patchwork-Delegate: david.oberhollenzer@sigma-star.at Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=PZCeAvij; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=patchwork.ozlabs.org) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T0rf66RgTz23dZ for ; Thu, 28 Dec 2023 12:34:38 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=U1/fgEsG/V8IVkYvnYyfCFbet2U1HLz5iVGgk64uSsI=; b=PZCeAvijxZZzR1 ilCN3TVa/hlJAVWJlB8QCiQHI5XMq+ZAr9hqx8t4w48nlynvIuEpvyCky/frA/FOmkFmWm8EtMc83 PqjN+P1a7PXsHhNB+wJMRcjsMEy12y+I6IWRPqhtTT3PZiOyVUhW3BPxRHc90OxmjMsJkTM03Afcl SecgOZEAhkzpVv107eRGVO8+N0L65F7ppGkDHGg4nb8M+HIRQCZVUSWamwKsne6rCt0xTDLTjHWqQ m4cqpAbnciI6IFuyCVxYpd6VNM2PpV9PJSsn2sp+OpKAgqRomhp9ePP03db63mKSP+3BVNb3H6Mfz kBJOT4h2OUVpM16pjWwQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHW-00Fo30-0A; Thu, 28 Dec 2023 01:33:54 +0000 Received: from szxga05-in.huawei.com ([45.249.212.191]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rIfHQ-00Fnzs-0I for linux-mtd@lists.infradead.org; Thu, 28 Dec 2023 01:33:52 +0000 Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4T0rXR3vnZz1FGHJ; Thu, 28 Dec 2023 09:29:43 +0800 (CST) Received: from kwepemm000013.china.huawei.com (unknown [7.193.23.81]) by mail.maildlp.com (Postfix) with ESMTPS id 764441A0172; Thu, 28 Dec 2023 09:33:35 +0800 (CST) Received: from huawei.com (10.175.127.227) by kwepemm000013.china.huawei.com (7.193.23.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 28 Dec 2023 09:33:34 +0800 From: Zhihao Cheng To: , , , , CC: , Subject: [PATCH mtd-utils 04/11] tests: ubifs_repair: Add powercut+repair+mount test Date: Thu, 28 Dec 2023 09:36:32 +0800 Message-ID: <20231228013639.2827205-5-chengzhihao1@huawei.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20231228013639.2827205-1-chengzhihao1@huawei.com> References: <20231228013639.2827205-1-chengzhihao1@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.175.127.227] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm000013.china.huawei.com (7.193.23.81) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231227_173348_502157_A783C7F2 X-CRM114-Status: GOOD ( 15.87 ) X-Spam-Score: -2.3 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Inject powercut while doing fsstress on mounted UBIFS for kinds of flashes (eg. nand, nor). This testcase mainly makes sure that ubifs_repair can make UBIFS image be consistent on different flashes (e [...] Content analysis details: (-2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_IN_MSPIKE_H5 RBL: Excellent reputation (+5) [45.249.212.191 listed in wl.mailspike.net] -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.191 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Inject powercut while doing fsstress on mounted UBIFS for kinds of flashes (eg. nand, nor). This testcase mainly makes sure that ubifs_repair can make UBIFS image be consistent on different flashes (eg. nand, nor). Because the min_io_size of nor flash is 1, the UBIFS image on nor flash will be different from nand flash after doing powercut, so we need make sure ubifs_repair can handle these two types of flash. Signed-off-by: Zhihao Cheng --- .gitignore | 1 + configure.ac | 3 +- tests/ubifs_repair-tests/Makemodule.am | 3 +- .../tests/powercut_repair_mount.sh.in | 138 +++++++++++++++++++++ 4 files changed, 143 insertions(+), 2 deletions(-) create mode 100755 tests/ubifs_repair-tests/tests/powercut_repair_mount.sh.in diff --git a/.gitignore b/.gitignore index 1a5fe7e..d47282c 100644 --- a/.gitignore +++ b/.gitignore @@ -115,6 +115,7 @@ tests/ubi-tests/ubi-stress-test.sh tests/ubifs_repair-tests/lib/common.sh tests/ubifs_repair-tests/tests/authentication_refuse.sh tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh +tests/ubifs_repair-tests/tests/powercut_repair_mount.sh # # Files generated by autotools diff --git a/configure.ac b/configure.ac index 73a3853..349e4ad 100644 --- a/configure.ac +++ b/configure.ac @@ -357,6 +357,7 @@ AC_CONFIG_FILES([tests/fs-tests/fs_help_all.sh tests/ubi-tests/ubi-stress-test.sh tests/ubifs_repair-tests/lib/common.sh tests/ubifs_repair-tests/tests/authentication_refuse.sh - tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh]) + tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh + tests/ubifs_repair-tests/tests/powercut_repair_mount.sh]) AC_OUTPUT([Makefile]) diff --git a/tests/ubifs_repair-tests/Makemodule.am b/tests/ubifs_repair-tests/Makemodule.am index c2556f5..92f288a 100644 --- a/tests/ubifs_repair-tests/Makemodule.am +++ b/tests/ubifs_repair-tests/Makemodule.am @@ -1,4 +1,5 @@ test_SCRIPTS += \ tests/ubifs_repair-tests/lib/common.sh \ tests/ubifs_repair-tests/tests/authentication_refuse.sh \ - tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh + tests/ubifs_repair-tests/tests/cycle_mount_repair_check.sh \ + tests/ubifs_repair-tests/tests/powercut_repair_mount.sh diff --git a/tests/ubifs_repair-tests/tests/powercut_repair_mount.sh.in b/tests/ubifs_repair-tests/tests/powercut_repair_mount.sh.in new file mode 100755 index 0000000..a5c7da6 --- /dev/null +++ b/tests/ubifs_repair-tests/tests/powercut_repair_mount.sh.in @@ -0,0 +1,138 @@ +#!/bin/sh +# Copyright (c), 2023-2024, Huawei Technologies Co, Ltd. +# Author: Zhihao Cheng +# +# Test Description: +# For many kinds of flash, do following things +# 1. mount UBIFS +# 2. fsstress & powercut & unmount +# 3. repair ubifs +# 4. check UBIFS mounting result +# Running time: 1h + +TESTBINDIR=@TESTBINDIR@ +source $TESTBINDIR/common.sh + +function run_test() +{ + local simulator="$1"; + local size="$2"; + local peb_size="$3"; + local page_size="$4"; + local encryption=$5; + + echo "======================================================================" + printf "%s" "$simulator: ${size}MiB PEB size ${peb_size}KiB" + if [ "$simulator" = "nandsim" ]; then + printf " %s" "page size ${page_size}KiB" + fi + printf " $encryption\n" + + if [ "$simulator" = "nandsim" ]; then + $TESTBINDIR/load_nandsim.sh "$size" "$peb_size" "$page_size" || echo "cannot load nandsim"; + mtdnum="$(find_mtd_device "$nandsim_patt")" + elif [ "$simulator" = "mtdram" ]; then + load_mtdram "$size" "$peb_size" || echo "cannot load mtdram" + mtdnum="$(find_mtd_device "$mtdram_patt")" + else + fatal "$simulator is not supported" + fi + + flash_eraseall /dev/mtd$mtdnum + modprobe ubi mtd="$mtdnum,$page_size,0,0,1" fm_autoconvert || fatal "modprobe ubi fail" + ubimkvol -N vol_test -m -n 0 /dev/ubi$UBI_NUM || fatal "mkvol fail" + modprobe ubifs || fatal "modprobe ubifs fail" + mount_ubifs $DEV $MNT || fatal "mount ubifs fail" + if [[ "$encryption" == "encrypted" ]]; then + encryption_gen_key + encryption_set_key $MNT + fi + + fsstress -d $MNT -l0 -p4 -n10000 & + sleep $((RANDOM % 120)) + powercut + + ps -e | grep -w fsstress > /dev/null 2>&1 + while [ $? -eq 0 ] + do + killall -9 fsstress > /dev/null 2>&1 + sleep 1 + ps -e | grep -w fsstress > /dev/null 2>&1 + done + + while true + do + res=`mount | grep "$MNT"` + if [[ "$res" == "" ]] + then + break; + fi + umount $MNT + sleep 0.1 + done + + echo 'format "UBIFS DBG repair" +pflmt' > /sys/kernel/debug/dynamic_debug/control + echo "$DEV" > /sys/kernel/debug/ubifs/repair_fs + res=$? + if [[ $res != 0 ]] + then + fatal "repair fail $res" + fi + + check_memleak + + dmesg -c > /dev/null # powercut and repairing could reproduce error messages + + enable_chkfs + + mount_ubifs $DEV $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "mount fail $res" + fi + + if [[ "$encryption" == "encrypted" ]]; then + encryption_set_key $MNT + fi + + du -sh $MNT > /dev/null # Make sure all files are accessible + ret=$? + if [[ $ret != 0 ]]; then + fatal "Cannot access all files" + fi + check_err_msg + + umount $MNT + res=$? + if [[ $res != 0 ]] + then + fatal "unmount fail $res" + fi + + check_err_msg + + modprobe -r ubifs + modprobe -r ubi + modprobe -r $simulator + + echo "----------------------------------------------------------------------" +} + +check_fsstress +start_t=$(date +%s) +echo "Do powercut+repair+mount test in kinds of flashes" +for simulator in "mtdram" "nandsim"; do + for encryption in "encrypted" "noencrypted"; do + run_test "$simulator" "16" "16" "512" $encryption + run_test "$simulator" "64" "16" "512" $encryption + run_test "$simulator" "128" "64" "2048" $encryption + run_test "$simulator" "256" "128" "2048" $encryption + run_test "$simulator" "512" "128" "2048" $encryption + run_test "$simulator" "1024" "512" "2048" $encryption + done +done +end_t=$(date +%s) +time_cost=$(( end_t - start_t )) +echo "Success, cost $time_cost seconds" +exit 0