From patchwork Tue Nov 13 05:00:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jayashree Mohan X-Patchwork-Id: 10679551 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7E25014E2 for ; Tue, 13 Nov 2018 05:01:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6BB4B29FE8 for ; Tue, 13 Nov 2018 05:01:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5E7C52A011; Tue, 13 Nov 2018 05:01:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5CD4D29FE8 for ; Tue, 13 Nov 2018 05:01:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730729AbeKMO5g (ORCPT ); Tue, 13 Nov 2018 09:57:36 -0500 Received: from mail-vs1-f66.google.com ([209.85.217.66]:40987 "EHLO mail-vs1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726111AbeKMO5f (ORCPT ); Tue, 13 Nov 2018 09:57:35 -0500 Received: by mail-vs1-f66.google.com with SMTP id t17so6511132vsc.8 for ; Mon, 12 Nov 2018 21:01:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=zuZl2ez4lG8lS6Dub/s18xzXiVCZIgaM+Xl6qiXUtGU=; b=Vx3IAFJbi9elh00JbMID7lJV2eWbekfPfyyg9lajoRc0oVTszKevCrun5mgPG5BwXl +1cx0g19APyd47fZtje3Eg5xweZMVIN+4hSgssMIt/Ew4HhZKxQuzVLZ4OotuYhLvBBk dxYYrUQgXLVmKOZQ5tLO79zGT5EAQAli9lMBmvOo/uBn1Im4CveUYLC7zKor5/uG27ey 789uttiiV+yYO5cmdG3ULmWon6h/9RAVW3fpSYTaLXfePLZsLX8/R1UGsvm92rKWbyqF KxwnJIT6/NXQ2lwwclA3EZ7oKAAPaMRZK3t0VnpxDWGRc2I+q0Xr3TgjfL32PJ1m6h8Z sdSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=zuZl2ez4lG8lS6Dub/s18xzXiVCZIgaM+Xl6qiXUtGU=; b=cCOUDJ8xXtqOYQqQGQzfIazO+R1mdLUTLeRervnUETNG/6KqVw4FiNMtUmnFbW2JGp BcEE1QTxZ5J0L3qn60O5SSAdnXssoVr96GIMHdhM6rPR+6sKtYpTegvVdof8ss3DY53q EhMNf8buWp1X7/ltPnPtSGFREUd4EHupsWW/OxgMROPhqZyEpLgAeze+0uxQAo1P0blk SWd+Eq/2J8YsGrS2R2F09mmL1btVHUZpRwri+yC7j3P6isv+qhnzU/92wtebq7IXph7B ptPdDxaGEbWeix19WyWnbEwGZ3D0PdLORYIc8Be4y5b7JOaEACZPlj+WyseFC3KTySV5 5Wzw== X-Gm-Message-State: AGRZ1gI+m5NVQVbdn+u7zNUUHDo5EUfDr0yViisGbVJTDm+6voaTBA75 hivQXzOW9eqQLUGobRIAck/bn8n7TO0aKPGDhoIhnK6v X-Google-Smtp-Source: AJdET5f1AHDq+4TT0Y6Qtx4H9qWtQnaU40CgFjBU3aP3AlWw0nUYFBzPhT9eWJdePMjDp8syyPi/TDSXmDD/efIqN3w= X-Received: by 2002:a67:e34e:: with SMTP id s14mr1559550vsm.95.1542085273930; Mon, 12 Nov 2018 21:01:13 -0800 (PST) MIME-Version: 1.0 From: Jayashree Mohan Date: Mon, 12 Nov 2018 23:00:57 -0600 Message-ID: Subject: [PATCH v2] fstest: CrashMonkey tests ported to xfstest Inbox x To: fstests Cc: Dave Chinner , Eryu Guan , Amir Goldstein , Filipe Manana , "Theodore Ts'o" , Vijaychidambaram Velayudhan Pillai Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Hi all, Here is the new patch porting the first set of CrashMonkey tests to xfstests. This patch batches 37 CrashMonkey tests, and tests them on a file system of size 200MB. Each sub test is also followed by fsck to check for metadata inconsistencies. This test is added to a new group - regress. Let me know if this looks good to you. Thanks, Jayashree diff --git a/tests/generic/517 b/tests/generic/517 new file mode 100755 index 0000000..3e92fbb --- /dev/null +++ b/tests/generic/517 @@ -0,0 +1,183 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 The University of Texas at Austin. All Rights Reserved. +# +# FS QA Test 517-link +# +# Test case created by CrashMonkey +# +# Test if we create a hard link to a file and persist either of the files, all the names persist. +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + _cleanup_flakey + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/dmflakey + +# 200MB in byte +fssize=$((2**20 * 200)) + +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here +_supported_fs generic +_supported_os Linux +_require_scratch_nocheck +_require_dm_target flakey + +# initialize scratch device +_scratch_mkfs_sized $fssize >> $seqres.full 2>&1 +_require_metadata_journaling $SCRATCH_DEV +_init_flakey + +stat_opt='-c "blocks: %b size: %s inode: %i links: %h"' +before="" +after="" + + +# Using _scratch_mkfs instead of cleaning up the working directory, +# adds about 10 seconds of delay in total for the 37 tests. +_clean_dir() +{ + _mount_flakey + rm -rf $SCRATCH_MNT/* + sync + _unmount_flakey +} + +_check_consistency() +{ + _flakey_drop_and_remount | tee -a $seqres.full + + if [ -f $1 ]; then + after=`stat "$stat_opt" $1` + fi + + if [ "$before" != "$after" ] && [ $2 -ne 1 ]; then + echo "Before: $before" + echo "After: $after" + fi + + _unmount_flakey + _check_scratch_fs $FLAKEY_DEV + [ $? -ne 0 ] && _fatal "fsck failed" +} + +# create a hard link $2 to file $1, and fsync $3, followed by power-cut +test_link_fsync() +{ + local sibling=0 + before="" + after="" + src=$SCRATCH_MNT/$1 + dest=$SCRATCH_MNT/$2 + + if [ "$3" == "./" ]; then + fsync=$SCRATCH_MNT + else + fsync=$SCRATCH_MNT/$3 + fi + + echo -ne "\n=== link $src $dest with fsync $fsync ===\n" | _filter_scratch + _mount_flakey + + # Now execute the workload + # Create the directory in which the source and destination files + # will be created + mkdir -p "${src%/*}" + mkdir -p "${dest%/*}" + touch $src + ln $src $dest + + # If the file being persisted is a sibling, create it first + if [ ! -f $fsync ]; then + sibling=1 + touch $fsync + fi + + $XFS_IO_PROG -c "fsync" $fsync + + if [ $sibling -ne 1 ]; then + before=`stat "$stat_opt" $src` + fi + + _check_consistency $src $sibling + _clean_dir +} + +# create a hard link $2 to file $1, and sync, followed by power-cut +test_link_sync() +{ + src=$SCRATCH_MNT/$1 + dest=$SCRATCH_MNT/$2 + before="" + after="" + echo -ne "\n=== link $src $dest with sync ===\n" | _filter_scratch + _mount_flakey + + # now execute the workload + # Create the directory in which the source and destination files + # will be created + mkdir -p "${src%/*}" + mkdir -p "${dest%/*}" + touch $src + ln $src $dest + sync + before=`stat "$stat_opt" $src` + + _check_consistency $src 0 + _clean_dir +} + + +# Create different combinations to run the link test +# Group 0: Both files within root directory +file_names[0]="foo bar" +fsync_names[0]="./ foo bar" + +# Group 1: Create hard link in a sub directory +file_names[1]="foo A/bar" +fsync_names[1]="./ foo bar A A/bar A/foo" + +# Group 2: Create hard link in parent directory +file_names[2]="A/foo bar" +fsync_names[2]="./ foo bar A A/bar A/foo" + +# Group 3: Both files within a directory other than root +file_names[3]="A/foo A/bar" +fsync_names[3]="./ A A/bar A/foo" + +#Group 4: Exercise name reuse : Link file in sub-directory +file_names[4]="bar A/bar" +fsync_names[4]="./ foo bar A A/bar A/foo" + +#Group 5: Exercise name reuse : Link file in parent directory +file_names[5]="A/bar bar" +fsync_names[5]="./ foo bar A A/bar A/foo" + +for ((test_group=0; test_group<6; test_group++)); do + for file in ${fsync_names[$test_group]}; do + test_link_fsync ${file_names[$test_group]} $file + done + test_link_sync ${file_names[$test_group]} +done + +# success, all done +status=0 +exit diff --git a/tests/generic/517.out b/tests/generic/517.out new file mode 100644 index 0000000..b0d75a1 --- /dev/null +++ b/tests/generic/517.out @@ -0,0 +1,75 @@ +QA output created by 517 + +=== link SCRATCH_MNT/foo SCRATCH_MNT/bar with fsync SCRATCH_MNT === + +=== link SCRATCH_MNT/foo SCRATCH_MNT/bar with fsync SCRATCH_MNT/foo === + +=== link SCRATCH_MNT/foo SCRATCH_MNT/bar with fsync SCRATCH_MNT/bar === + +=== link SCRATCH_MNT/foo SCRATCH_MNT/bar with sync === + +=== link SCRATCH_MNT/foo SCRATCH_MNT/A/bar with fsync SCRATCH_MNT === + +=== link SCRATCH_MNT/foo SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/foo === + +=== link SCRATCH_MNT/foo SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/bar === + +=== link SCRATCH_MNT/foo SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/A === + +=== link SCRATCH_MNT/foo SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/A/bar === + +=== link SCRATCH_MNT/foo SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/A/foo === + +=== link SCRATCH_MNT/foo SCRATCH_MNT/A/bar with sync === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/bar with fsync SCRATCH_MNT === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/bar with fsync SCRATCH_MNT/foo === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/bar with fsync SCRATCH_MNT/bar === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/bar with fsync SCRATCH_MNT/A === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/bar with fsync SCRATCH_MNT/A/bar === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/bar with fsync SCRATCH_MNT/A/foo === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/bar with sync === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/A/bar with fsync SCRATCH_MNT === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/A === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/A/bar === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/A/foo === + +=== link SCRATCH_MNT/A/foo SCRATCH_MNT/A/bar with sync === + +=== link SCRATCH_MNT/bar SCRATCH_MNT/A/bar with fsync SCRATCH_MNT === + +=== link SCRATCH_MNT/bar SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/foo === + +=== link SCRATCH_MNT/bar SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/bar === + +=== link SCRATCH_MNT/bar SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/A === + +=== link SCRATCH_MNT/bar SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/A/bar === + +=== link SCRATCH_MNT/bar SCRATCH_MNT/A/bar with fsync SCRATCH_MNT/A/foo === + +=== link SCRATCH_MNT/bar SCRATCH_MNT/A/bar with sync === + +=== link SCRATCH_MNT/A/bar SCRATCH_MNT/bar with fsync SCRATCH_MNT === + +=== link SCRATCH_MNT/A/bar SCRATCH_MNT/bar with fsync SCRATCH_MNT/foo === + +=== link SCRATCH_MNT/A/bar SCRATCH_MNT/bar with fsync SCRATCH_MNT/bar === + +=== link SCRATCH_MNT/A/bar SCRATCH_MNT/bar with fsync SCRATCH_MNT/A === + +=== link SCRATCH_MNT/A/bar SCRATCH_MNT/bar with fsync SCRATCH_MNT/A/bar === + +=== link SCRATCH_MNT/A/bar SCRATCH_MNT/bar with fsync SCRATCH_MNT/A/foo === + +=== link SCRATCH_MNT/A/bar SCRATCH_MNT/bar with sync === diff --git a/tests/generic/group b/tests/generic/group index 47de978..3e81ae8 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -519,3 +519,4 @@ 514 auto quick clone 515 auto quick clone 516 auto quick dedupe clone +517 regress