From patchwork Wed Dec 7 00:18:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 9486707 X-Mozilla-Keys: nonjunk Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on sandeen.net X-Spam-Level: X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD, UNPARSEABLE_RELAY, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 X-Spam-HP: BAYES_00=-1.9,HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_HI=-5,RP_MATCHES_RCVD=-0.1,UNPARSEABLE_RELAY=0.001, URIBL_BLOCKED=0.001 X-Original-To: sandeen@sandeen.net Delivered-To: sandeen@sandeen.net Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by sandeen.net (Postfix) with ESMTP id D6EA547968F for ; Tue, 6 Dec 2016 18:18:03 -0600 (CST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752646AbcLGATC (ORCPT ); Tue, 6 Dec 2016 19:19:02 -0500 Received: from aserp1040.oracle.com ([141.146.126.69]:23719 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752099AbcLGATC (ORCPT ); Tue, 6 Dec 2016 19:19:02 -0500 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id uB70IwcW023871 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 7 Dec 2016 00:18:58 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0021.oracle.com (8.13.8/8.14.4) with ESMTP id uB70IwAr029267 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 7 Dec 2016 00:18:58 GMT Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id uB70IuCe025480; Wed, 7 Dec 2016 00:18:57 GMT Received: from localhost (/24.21.211.40) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 06 Dec 2016 16:18:56 -0800 Subject: [PATCH 07/11] common/fuzzy: move fuzzing helper functions here From: "Darrick J. Wong" To: david@fromorbit.com, eguan@redhat.com, darrick.wong@oracle.com Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org Date: Tue, 06 Dec 2016 16:18:55 -0800 Message-ID: <148106993543.19334.11695200561855461297.stgit@birch.djwong.org> In-Reply-To: <148106989109.19334.6839386416313318071.stgit@birch.djwong.org> References: <148106989109.19334.6839386416313318071.stgit@birch.djwong.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Source-IP: aserv0021.oracle.com [141.146.126.233] Sender: linux-xfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-xfs@vger.kernel.org Move some fuzzing helper functions into a new common/fuzzy file. We'll add a lot more fuzzing helpers in subsequent patches. Signed-off-by: Darrick J. Wong --- common/fuzzy | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ common/populate | 36 ------------------------ tests/ext4/006 | 1 + tests/xfs/083 | 1 + 4 files changed, 85 insertions(+), 36 deletions(-) create mode 100644 common/fuzzy -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/common/fuzzy b/common/fuzzy new file mode 100644 index 0000000..964a463 --- /dev/null +++ b/common/fuzzy @@ -0,0 +1,83 @@ +##/bin/bash + +# Routines for fuzzing and scrubbing a filesystem. +# +#----------------------------------------------------------------------- +# Copyright (c) 2016 Oracle. All Rights Reserved. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA +# +# Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, +# Mountain View, CA 94043, USA, or: http://www.sgi.com +#----------------------------------------------------------------------- + +# Modify various files after a fuzzing operation +_scratch_fuzz_modify() { + nr="$1" + + test -z "${nr}" && nr=50000 + echo "+++ touch ${nr} files" + blk_sz=$(stat -f -c '%s' ${SCRATCH_MNT}) + $XFS_IO_PROG -f -c "pwrite -S 0x63 0 ${blk_sz}" "/tmp/afile" > /dev/null + date="$(date)" + find "${SCRATCH_MNT}/" -type f 2> /dev/null | head -n "${nr}" | while read f; do + setfattr -n "user.date" -v "${date}" "$f" + cat "/tmp/afile" >> "$f" + mv "$f" "$f.longer" + done + sync + rm -rf "/tmp/afile" + + echo "+++ create files" + mkdir -p "${SCRATCH_MNT}/test.moo" + $XFS_IO_PROG -f -c 'pwrite -S 0x80 0 65536' "${SCRATCH_MNT}/test.moo/urk" + sync + + echo "+++ remove files" + rm -rf "${SCRATCH_MNT}/test.moo" +} + +# Try to access files after fuzzing +_scratch_fuzz_test() { + echo "+++ ls -laR" >> $seqres.full + ls -laR "${SCRATCH_MNT}/test.1/" >/dev/null 2>&1 + + echo "+++ cat files" >> $seqres.full + (find "${SCRATCH_MNT}/test.1/" -type f -size -1048576k -print0 | xargs -0 cat) >/dev/null 2>&1 +} + +# Do we have an online scrub program? +_require_scrub() { + case "${FSTYP}" in + "xfs"|"ext4") + test -x $XFS_SCRUB_PROG || _notrun "xfs_scrub not found" + ;; + *) + _notrun "No online scrub program for ${FSTYP}." + ;; + esac +} + +# Scrub the scratch filesystem metadata (online) +_scratch_scrub() { + case "${FSTYP}" in + "xfs"|"ext4"|"ext3"|"ext2") + $XFS_SCRUB_PROG -d -T -v "$@" $SCRATCH_MNT + ;; + *) + _fail "No online scrub program for ${FSTYP}." + ;; + esac +} diff --git a/common/populate b/common/populate index 5227cd1..74a77a1 100644 --- a/common/populate +++ b/common/populate @@ -605,39 +605,3 @@ _scratch_populate() { ;; esac } - -# Modify various files after a fuzzing operation -_scratch_fuzz_modify() { - nr="$1" - - test -z "${nr}" && nr=50000 - echo "+++ touch ${nr} files" - blk_sz=$(stat -f -c '%s' ${SCRATCH_MNT}) - $XFS_IO_PROG -f -c "pwrite -S 0x63 0 ${blk_sz}" "/tmp/afile" > /dev/null - date="$(date)" - find "${SCRATCH_MNT}/" -type f 2> /dev/null | head -n "${nr}" | while read f; do - setfattr -n "user.date" -v "${date}" "$f" - cat "/tmp/afile" >> "$f" - mv "$f" "$f.longer" - done - sync - rm -rf "/tmp/afile" - - echo "+++ create files" - mkdir -p "${SCRATCH_MNT}/test.moo" - $XFS_IO_PROG -f -c 'pwrite -S 0x80 0 65536' "${SCRATCH_MNT}/test.moo/urk" - sync - - echo "+++ remove files" - rm -rf "${SCRATCH_MNT}/test.moo" -} - -# Try to access files after fuzzing -_scratch_fuzz_test() { - echo "+++ ls -laR" >> $seqres.full - ls -laR "${SCRATCH_MNT}/test.1/" >/dev/null 2>&1 - - echo "+++ cat files" >> $seqres.full - (find "${SCRATCH_MNT}/test.1/" -type f -size -1048576k -print0 | xargs -0 cat) >/dev/null 2>&1 -} - diff --git a/tests/ext4/006 b/tests/ext4/006 index 9662f50..bb9b7e5 100755 --- a/tests/ext4/006 +++ b/tests/ext4/006 @@ -43,6 +43,7 @@ _cleanup() . ./common/filter . ./common/attr . ./common/populate +. ./common/fuzzy if [ ! -x "$(which e2fuzz)" ]; then _notrun "Couldn't find e2fuzz" diff --git a/tests/xfs/083 b/tests/xfs/083 index 39bd75f..e2b5f82 100755 --- a/tests/xfs/083 +++ b/tests/xfs/083 @@ -43,6 +43,7 @@ _cleanup() . ./common/filter . ./common/attr . ./common/populate +. ./common/fuzzy # real QA test starts here _supported_fs xfs