public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fstests: btrfs/248: test if btrfs receive can handle clone command on inodes with different NODATASUM flags
@ 2021-09-29  0:44 Qu Wenruo
  2021-09-29  6:45 ` Nikolay Borisov
  2021-09-29  9:14 ` Filipe Manana
  0 siblings, 2 replies; 5+ messages in thread
From: Qu Wenruo @ 2021-09-29  0:44 UTC (permalink / raw)
  To: fstests; +Cc: linux-btrfs

The planned fix is titled "btrfs-progs: receive: fallback to buffered
copy if clone failed".

The test case itself will create two send streams, and the 2nd stream is
an incremental stream with a clone command in it.

Using different mount options we are able to create a situation where
clone source and destination have different NODATASUM flags, which is
prohibited inside btrfs.

The planned fix will make btrfs receive to fall back to buffered write
to copy the data from the source file.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 tests/btrfs/248     | 74 +++++++++++++++++++++++++++++++++++++++++++++
 tests/btrfs/248.out |  2 ++
 2 files changed, 76 insertions(+)
 create mode 100755 tests/btrfs/248
 create mode 100644 tests/btrfs/248.out

diff --git a/tests/btrfs/248 b/tests/btrfs/248
new file mode 100755
index 00000000..964d3e85
--- /dev/null
+++ b/tests/btrfs/248
@@ -0,0 +1,74 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2021 SUSE Linux Products GmbH.  All Rights Reserved.
+#
+# FS QA Test 248
+#
+# Make sure btrfs receive can still handle clone stream even if the source
+# and destination has different NODATASUM flags
+#
+. ./common/preamble
+_begin_fstest quick send
+
+# Override the default cleanup function.
+_cleanup()
+{
+	cd /
+	rm -r -f $tmp.*
+}
+
+# Import common functions.
+# . ./common/filter
+
+# real QA test starts here
+
+# Modify as appropriate.
+_supported_fs btrfs
+_require_scratch
+
+_scratch_mkfs >> $seqres.full 2>&1
+_scratch_mount -o datasum
+
+# Create the initial subvolume with a file
+$BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/parent >> $seqres.full
+$XFS_IO_PROG -f -c "pwrite 0 1m" $SCRATCH_MNT/parent/source \
+	> /dev/null
+sync
+$BTRFS_UTIL_PROG prop set $SCRATCH_MNT/parent ro true
+$BTRFS_UTIL_PROG send -q $SCRATCH_MNT/parent -f $tmp.parent_stream
+_scratch_unmount
+_scratch_mkfs >> $seqres.full 2>&1
+_scratch_mount -o datasum
+
+# Then create a new subvolume with cloned file from above send stream
+$BTRFS_UTIL_PROG receive -q -f $tmp.parent_stream $SCRATCH_MNT
+$BTRFS_UTIL_PROG subvolume snapshot $SCRATCH_MNT/parent $SCRATCH_MNT/dest \
+	>> $seqres.full
+$XFS_IO_PROG -f -c "reflink $SCRATCH_MNT/parent/source 4k 0 128K" \
+	$SCRATCH_MNT/dest/new > /dev/null
+$BTRFS_UTIL_PROG prop set $SCRATCH_MNT/dest ro true
+$BTRFS_UTIL_PROG send -q $SCRATCH_MNT/dest -p $SCRATCH_MNT/parent \
+	-f $tmp.clone_stream
+
+_scratch_unmount
+_scratch_mkfs >> $seqres.full 2>&1
+_scratch_mount -o datasum
+
+# Now try to receive both streams
+$BTRFS_UTIL_PROG receive -q -f $tmp.parent_stream $SCRATCH_MNT/
+
+# Remount to NODATASUM, so that the 2nd stream will get all its inodes to have
+# NODATASUM flags due to mount option
+_scratch_remount nodatasum
+
+# Patched receive may warn about the clone failure, so here we redirect all
+# output
+$BTRFS_UTIL_PROG receive -q -f $tmp.clone_stream $SCRATCH_MNT/ \
+	>> $seqres.full 2>&1
+
+# We check the destination file's csum to verify if the clone is done properly
+_md5_checksum $SCRATCH_MNT/dest/new
+
+# success, all done
+status=0
+exit
diff --git a/tests/btrfs/248.out b/tests/btrfs/248.out
new file mode 100644
index 00000000..b49cfad7
--- /dev/null
+++ b/tests/btrfs/248.out
@@ -0,0 +1,2 @@
+QA output created by 248
+d48858312a922db7eb86377f638dbc9f
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-09-29  9:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-29  0:44 [PATCH] fstests: btrfs/248: test if btrfs receive can handle clone command on inodes with different NODATASUM flags Qu Wenruo
2021-09-29  6:45 ` Nikolay Borisov
2021-09-29  6:59   ` Qu Wenruo
2021-09-29  9:14 ` Filipe Manana
2021-09-29  9:23   ` Qu Wenruo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox