]> git.apps.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
btrfs: add a regression test for running snapshot and send concurrently
authorWang Shilong <wangsl.fnst@cn.fujitsu.com>
Tue, 18 Feb 2014 06:50:23 +0000 (17:50 +1100)
committerDave Chinner <david@fromorbit.com>
Tue, 18 Feb 2014 06:50:23 +0000 (17:50 +1100)
Btrfs would fail to send if snapshot run concurrently, this test is to make
sure we have fixed the bug.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
tests/btrfs/036 [new file with mode: 0755]
tests/btrfs/036.out [new file with mode: 0644]
tests/btrfs/group

diff --git a/tests/btrfs/036 b/tests/btrfs/036
new file mode 100755 (executable)
index 0000000..57ad737
--- /dev/null
@@ -0,0 +1,85 @@
+#!/bin/bash
+# FS QA Test No. btrfs/036
+#
+# Regression test for running snapshots and send concurrently.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2014 Fujitsu.  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!
+snapshots_pid=0
+
+_cleanup()
+{
+       # kill backgroud snapshots
+       if [ $snapshots_pid -ne 0 ] && ps -p $snapshots_pid | grep -q $snapshots_pid; then
+               kill -TERM $snapshots_pid 2> /dev/null
+       fi
+       rm -f $tmp.*
+}
+
+do_snapshots()
+{
+       i=2
+       while [ 1 ]
+       do
+               $BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT/snap_1 \
+                       $SCRATCH_MNT/snap_$i >> $seqres.full 2>&1
+               let i=$i+1
+               sleep 1
+       done
+}
+
+trap "_cleanup ; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs btrfs
+_supported_os Linux
+_require_scratch
+
+_scratch_mkfs > /dev/null 2>&1
+_scratch_mount
+
+touch $SCRATCH_MNT/foo
+
+# get file with fragments by using backwards writes.
+for i in `seq 10240 -1 1`; do
+       $XFS_IO_PROG -f -d -c "pwrite $(($i * 4096)) 4096" \
+               $SCRATCH_MNT/foo > /dev/null | _filter_xfs_io
+done
+
+$BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT \
+       $SCRATCH_MNT/snap_1 >> $seqres.full 2>&1
+
+do_snapshots &
+snapshots_pid=$!
+
+$BTRFS_UTIL_PROG send $SCRATCH_MNT/snap_1 -f /dev/null 2>&1 | _filter_scratch
+
+status=0 ; exit
diff --git a/tests/btrfs/036.out b/tests/btrfs/036.out
new file mode 100644 (file)
index 0000000..605443b
--- /dev/null
@@ -0,0 +1,2 @@
+QA output created by 036
+At subvol SCRATCH_MNT/snap_1
index bee57cbacc513c60ed9482e4ace73bce838d9c19..bbe6d2dcc250699300cf4cdf07ee6fc20bf2da19 100644 (file)
@@ -38,3 +38,4 @@
 033 auto quick
 034 auto quick
 035 auto quick
+036 auto quick