All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] btrfs: test send on subvolume with delalloc after setting it to RO mode
@ 2019-04-15  8:30 fdmanana
  0 siblings, 0 replies; only message in thread
From: fdmanana @ 2019-04-15  8:30 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs, Filipe Manana

From: Filipe Manana <fdmanana@suse.com>

Test that if we have a subvolume/snapshot that is writable, has a file
with unflushed delalloc (buffered writes not yet flushed), turn the
subvolume to readonly mode and then use it for send a operation, the send
stream will contain the delalloc data - that is, no data loss happens.

This currently files on btrfs (data loss) but is fixed by a patch for
the linux kernel titled:

  "Btrfs: send, flush dellaloc in order to avoid data loss"

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 tests/btrfs/185     | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/btrfs/185.out | 14 ++++++++++
 tests/btrfs/group   |  1 +
 3 files changed, 88 insertions(+)
 create mode 100755 tests/btrfs/185
 create mode 100644 tests/btrfs/185.out

diff --git a/tests/btrfs/185 b/tests/btrfs/185
new file mode 100755
index 00000000..8ccffd1e
--- /dev/null
+++ b/tests/btrfs/185
@@ -0,0 +1,73 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2019 SUSE Linux Products GmbH. All Rights Reserved.
+#
+# FS QA Test No. 185
+#
+# Test that if we have a subvolume/snapshot that is writable, has a file with
+# unflushed delalloc (buffered writes not yet flushed), turn the subvolume to
+# readonly mode and then use it for send a operation, the send stream will
+# contain the delalloc data - that is, no data loss happens.
+#
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+tmp=/tmp/$$
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $tmp.*
+	rm -fr $send_files_dir
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs btrfs
+_supported_os Linux
+_require_test
+_require_scratch
+_require_btrfs_command "property"
+
+send_files_dir=$TEST_DIR/btrfs-test-$seq
+
+rm -f $seqres.full
+rm -fr $send_files_dir
+mkdir $send_files_dir
+
+_scratch_mkfs >>$seqres.full 2>&1
+_scratch_mount
+
+# Create our test subvolume.
+$BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/sv | _filter_scratch
+
+# Create our test file with some delalloc data.
+$XFS_IO_PROG -f -c "pwrite -S 0xea 0 108K" $SCRATCH_MNT/sv/foo | _filter_xfs_io
+
+# Turn our subvolume to RO so that it can be used for a send operation.
+$BTRFS_UTIL_PROG property set $SCRATCH_MNT/sv ro true
+
+# Create the send stream.
+$BTRFS_UTIL_PROG send -f $send_files_dir/sv.send $SCRATCH_MNT/sv 2>&1 \
+    | _filter_scratch
+
+echo "File content in the original filesystem:"
+od -t x1 -A d $SCRATCH_MNT/sv/foo
+
+# Recreate the filesystem and apply the send stream and verify no data was lost.
+_scratch_unmount
+_scratch_mkfs >>$seqres.full 2>&1
+_scratch_mount
+
+$BTRFS_UTIL_PROG receive -f $send_files_dir/sv.send $SCRATCH_MNT
+
+echo "File content in the new filesystem:"
+od -t x1 -A d $SCRATCH_MNT/sv/foo
+
+status=0
+exit
diff --git a/tests/btrfs/185.out b/tests/btrfs/185.out
new file mode 100644
index 00000000..eb432982
--- /dev/null
+++ b/tests/btrfs/185.out
@@ -0,0 +1,14 @@
+QA output created by 185
+Create subvolume 'SCRATCH_MNT/sv'
+wrote 110592/110592 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+At subvol SCRATCH_MNT/sv
+File content in the original filesystem:
+0000000 ea ea ea ea ea ea ea ea ea ea ea ea ea ea ea ea
+*
+0110592
+At subvol sv
+File content in the new filesystem:
+0000000 ea ea ea ea ea ea ea ea ea ea ea ea ea ea ea ea
+*
+0110592
diff --git a/tests/btrfs/group b/tests/btrfs/group
index c1d215bf..6b81ecce 100644
--- a/tests/btrfs/group
+++ b/tests/btrfs/group
@@ -187,3 +187,4 @@
 182 auto quick balance
 183 auto quick clone compress punch
 184 auto quick volume
+185 auto quick send volume
-- 
2.11.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-04-15  8:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-15  8:30 [PATCH] btrfs: test send on subvolume with delalloc after setting it to RO mode fdmanana

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.