From patchwork Fri Sep 4 06:15:23 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anand Jain X-Patchwork-Id: 7120091 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id EB3779F1D5 for ; Fri, 4 Sep 2015 06:17:54 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id E9E6C20862 for ; Fri, 4 Sep 2015 06:17:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BE9CD207F1 for ; Fri, 4 Sep 2015 06:17:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757742AbbIDGRl (ORCPT ); Fri, 4 Sep 2015 02:17:41 -0400 Received: from userp1040.oracle.com ([156.151.31.81]:35475 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757647AbbIDGRj (ORCPT ); Fri, 4 Sep 2015 02:17:39 -0400 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id t846HamP023134 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 4 Sep 2015 06:17:37 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserv0022.oracle.com (8.13.8/8.13.8) with ESMTP id t846Ha2R022864 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL); Fri, 4 Sep 2015 06:17:36 GMT Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by userv0122.oracle.com (8.13.8/8.13.8) with ESMTP id t846HZ7p026650; Fri, 4 Sep 2015 06:17:35 GMT Received: from arch2.sg.oracle.com (/10.186.101.93) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 03 Sep 2015 23:17:35 -0700 From: Anand Jain To: fstests@vger.kernel.org Cc: linux-btrfs@vger.kernel.org, david@fromorbit.com, eguan@redhat.com Subject: [PATCH v9 3/3] xfstests: btrfs: test device delete with EIO on src dev Date: Fri, 4 Sep 2015 14:15:23 +0800 Message-Id: <1441347323-4682-4-git-send-email-anand.jain@oracle.com> X-Mailer: git-send-email 2.4.1 In-Reply-To: <1441347323-4682-1-git-send-email-anand.jain@oracle.com> References: <1441347323-4682-1-git-send-email-anand.jain@oracle.com> X-Source-IP: aserv0022.oracle.com [141.146.126.234] Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Anand Jain This test case tests if the device delete works with the failed (EIO) source device. EIO errors are achieved usign the DM device. This test would need following btrfs-progs and btrfs kernel patch btrfs-progs: device delete to accept devid Btrfs: device delete by devid However when btrfs-progs patch is not found this test will not run, and when kernel patch is not found btrfs-progs will fail gracefully and thus the test script. Signed-off-by: Anand Jain --- v8->v9: no change. v9 as 1/3 is revised v7->v8: . Inline with the patch 1/3 v8 changes, use dmerror_mount() v6->v7: accepts Dave's comments . in line with changes as in 1/3 mainly the renames v5->v6: accepts Eryu and Filipe's comments, thanks . correct cleanup with tmp.* . don't redirect run_check $FSFTRESS_PROG to dev null v4->v5: rebase on latest xfstests code, and accepts Filipe comment . cut line length to 80 char . accommodate to the regression introduced by a092363bbdfa6cc6e44353136bae9d3aa81baae2 v3->v4: rebase on latest xfstests code v2->v3: accepts Filipe Manana's review comments, thanks . induce FS load using FSSTRESS_PROG v1->v2: accepts Dave Chinner's review comments, thanks . move 'start with the clean devices' code to actually at the start of the script - damn why I didn't think like this before. Thanks Dave. . update .out file to contain the logs to verify. common/rc | 7 +++++ tests/btrfs/099 | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/btrfs/099.out | 11 +++++++ tests/btrfs/group | 1 + 4 files changed, 101 insertions(+) create mode 100755 tests/btrfs/099 create mode 100644 tests/btrfs/099.out diff --git a/common/rc b/common/rc index 7befa09..140ebd8 100644 --- a/common/rc +++ b/common/rc @@ -2737,6 +2737,13 @@ _require_meta_uuid() umount $SCRATCH_MNT } +_require_btrfs_dev_del_by_devid() +{ + $BTRFS_UTIL_PROG device delete --help | egrep devid > /dev/null 2>&1 + [ $? -eq 0 ] || _notrun "$BTRFS_UTIL_PROG too old "\ + "(must support 'btrfs device delete /')" +} + _get_total_inode() { if [ -z "$1" ]; then diff --git a/tests/btrfs/099 b/tests/btrfs/099 new file mode 100755 index 0000000..9793c9b --- /dev/null +++ b/tests/btrfs/099 @@ -0,0 +1,82 @@ +#! /bin/bash +# FS QA Test No. btrfs/099 +# +# Test device delete when the source device has EIO +# +# Copyright (c) 2015 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. +# +# This program is distributed in the hope that it would 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 the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +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() +{ + _dmerror_cleanup + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/filter.btrfs +. ./common/dmerror + +_supported_fs btrfs +_supported_os Linux +_need_to_be_root +_require_scratch_dev_pool 3 +_require_btrfs_dev_del_by_devid +_dmerror_required + +rm -f $seqres.full + +dev1="`echo $SCRATCH_DEV_POOL | $AWK_PROG '{print $2}'`" +dev2="`echo $SCRATCH_DEV_POOL | $AWK_PROG '{print $3}'`" + +_dmerror_init +_mkfs_dev -f -d raid1 -m raid1 $dev1 $dev2 $DMERROR_DEV +_dmerror_mount + +_run_btrfs_util_prog filesystem show -m $SCRATCH_MNT +$BTRFS_UTIL_PROG filesystem show -m $SCRATCH_MNT | _filter_btrfs_filesystem_show + +error_devid=`$BTRFS_UTIL_PROG filesystem show -m $SCRATCH_MNT |\ + egrep $DMERROR_DEV | $AWK_PROG '{print $2}'` + +snapshot_cmd="$BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT" +snapshot_cmd="$snapshot_cmd $SCRATCH_MNT/snap_\`date +'%H_%M_%S_%N'\`" +run_check $FSSTRESS_PROG -d $SCRATCH_MNT -n 200 -p 8 $FSSTRESS_AVOID -x \ + "$snapshot_cmd" -X 50 + +# now load the error into the DMERROR_DEV +_dmerror_load_table + +_run_btrfs_util_prog device delete $error_devid $SCRATCH_MNT + +_run_btrfs_util_prog filesystem show -m $SCRATCH_MNT +$BTRFS_UTIL_PROG filesystem show -m $SCRATCH_MNT | _filter_btrfs_filesystem_show + +echo "=== device delete completed" + +status=0; exit diff --git a/tests/btrfs/099.out b/tests/btrfs/099.out new file mode 100644 index 0000000..ec74e45 --- /dev/null +++ b/tests/btrfs/099.out @@ -0,0 +1,11 @@ +QA output created by 099 +Label: none uuid: + Total devices FS bytes used + devid size used path SCRATCH_DEV + devid size used path /dev/mapper/error-test + +Label: none uuid: + Total devices FS bytes used + devid size used path SCRATCH_DEV + +=== device delete completed diff --git a/tests/btrfs/group b/tests/btrfs/group index c8a53b5..968ee63 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -101,3 +101,4 @@ 096 auto quick clone 097 auto quick send clone 098 auto quick replace +099 auto quick replace