diff mbox

[v2,4/4] xfstests: btrfs/134: add test for incremental send which renames a directory already being deleted

Message ID 1477619046-16375-5-git-send-email-robbieko@synology.com (mailing list archive)
State Not Applicable
Headers show

Commit Message

robbieko Oct. 28, 2016, 1:44 a.m. UTC
From: Robbie Ko <robbieko@synology.com>

Test that an incremental send operation dosen't work because
it tries to rename a directory which is already deleted.

This test exercises scenarios used to fail in btrfs and are fixed by
the following patch for the linux kernel:

"Btrfs: incremental send, add generation check for inode is waiting for move."

Signed-off-by: Robbie Ko <robbieko@synology.com>
---
 tests/btrfs/134     | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/btrfs/134.out |   2 +
 tests/btrfs/group   |   1 +
 3 files changed, 123 insertions(+)
 create mode 100755 tests/btrfs/134
 create mode 100644 tests/btrfs/134.out

Comments

Eryu Guan Nov. 1, 2016, 7:20 a.m. UTC | #1
On Fri, Oct 28, 2016 at 09:44:06AM +0800, robbieko wrote:
> From: Robbie Ko <robbieko@synology.com>
> 
> Test that an incremental send operation dosen't work because
> it tries to rename a directory which is already deleted.
> 
> This test exercises scenarios used to fail in btrfs and are fixed by
> the following patch for the linux kernel:
> 
> "Btrfs: incremental send, add generation check for inode is waiting for move."

I was testing with v4.9-rc1+ kernel and btrfs-progs v4.6. Seems above
patch is not merged in 4.9-rc1 kernel, but test passed for me, is that
expected?

Thanks,
Eryu
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
robbieko Nov. 2, 2016, 3:52 a.m. UTC | #2
Hi Eryu Guan,

Yes, it need apply
[PATCH] "Btrfs: incremental send, do not skip generation inconsistency 
check for inode 256."
and test again, it will failed.

because current code there is a problem, but just will not happen.

Thansk
Robbie Ko

Eryu Guan 於 2016-11-01 15:20 寫到:
> On Fri, Oct 28, 2016 at 09:44:06AM +0800, robbieko wrote:
>> From: Robbie Ko <robbieko@synology.com>
>> 
>> Test that an incremental send operation dosen't work because
>> it tries to rename a directory which is already deleted.
>> 
>> This test exercises scenarios used to fail in btrfs and are fixed by
>> the following patch for the linux kernel:
>> 
>> "Btrfs: incremental send, add generation check for inode is waiting 
>> for move."
> 
> I was testing with v4.9-rc1+ kernel and btrfs-progs v4.6. Seems above
> patch is not merged in 4.9-rc1 kernel, but test passed for me, is that
> expected?
> 
> Thanks,
> Eryu


--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Filipe Manana Jan. 19, 2017, 12:11 p.m. UTC | #3
On Wed, Nov 2, 2016 at 3:52 AM, robbieko <robbieko@synology.com> wrote:
> Hi Eryu Guan,
>
> Yes, it need apply
> [PATCH] "Btrfs: incremental send, do not skip generation inconsistency check
> for inode 256."
> and test again, it will failed.
>
> because current code there is a problem, but just will not happen.

Then it's not a problem...
What your're saying is confusing to say the least.

I really don't like the idea of adding a patch that is know to
introduce a regression and then adding another patch that fixes it.
Anyway, your patchset has been reviewed and those patches are not
needed anymore as there's a better solution that doesn't imply
introducing a regression temporarily, so this test is not really
needed.

thanks

>
> Thansk
> Robbie Ko
>
> Eryu Guan 於 2016-11-01 15:20 寫到:
>
>> On Fri, Oct 28, 2016 at 09:44:06AM +0800, robbieko wrote:
>>>
>>> From: Robbie Ko <robbieko@synology.com>
>>>
>>> Test that an incremental send operation dosen't work because
>>> it tries to rename a directory which is already deleted.
>>>
>>> This test exercises scenarios used to fail in btrfs and are fixed by
>>> the following patch for the linux kernel:
>>>
>>> "Btrfs: incremental send, add generation check for inode is waiting for
>>> move."
>>
>>
>> I was testing with v4.9-rc1+ kernel and btrfs-progs v4.6. Seems above
>> patch is not merged in 4.9-rc1 kernel, but test passed for me, is that
>> expected?
>>
>> Thanks,
>> Eryu
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/tests/btrfs/134 b/tests/btrfs/134
new file mode 100755
index 0000000..64974a5
--- /dev/null
+++ b/tests/btrfs/134
@@ -0,0 +1,120 @@ 
+#! /bin/bash
+# FS QA Test No. btrfs/134
+#
+# Test that an incremental send operation dosen't work because
+# it tries to rename a directory which is already deleted.
+#
+#-----------------------------------------------------------------------
+# Copyright (C) 2016 Synology Inc. All Rights Reserved.
+# Author: Robbie Ko <robbieko@synology.com>
+#
+# 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"
+
+tmp=/tmp/$$
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -fr $send_files_dir
+	rm -f $tmp.*
+}
+
+# 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_fssum
+
+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
+
+mkdir $SCRATCH_MNT/d1
+mkdir $SCRATCH_MNT/d4
+mkdir $SCRATCH_MNT/d3
+
+# Filesystem looks like:
+#
+# .                                                             (ino 256)
+# |--- d1                                                       (ino 257)
+# |--- d4                                                       (ino 258)
+# |--- d3                                                       (ino 259)
+#
+_run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap1
+
+_run_btrfs_util_prog send $SCRATCH_MNT/mysnap1 -f $send_files_dir/1.snap
+
+_scratch_unmount
+_scratch_mkfs >>$seqres.full 2>&1
+_scratch_mount
+mkdir $SCRATCH_MNT/d1
+mkdir $SCRATCH_MNT/d2
+mkdir $SCRATCH_MNT/d3
+mkdir $SCRATCH_MNT/d4
+mv $SCRATCH_MNT/d1 $SCRATCH_MNT/d3/d1
+mv $SCRATCH_MNT/d3 $SCRATCH_MNT/d4/d3
+mv $SCRATCH_MNT/d2 $SCRATCH_MNT/d1
+
+# Filesystem now looks like:
+#
+# .                                                             (ino 256)
+# |--- d1                                                       (ino 258)
+# |--- d4                                                       (ino 260)
+# |    |--- d3/                                                 (ino 259)
+# |    |    |--- d1/                                            (ino 257)
+#
+_run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap2
+
+_run_btrfs_util_prog receive $SCRATCH_MNT -f $send_files_dir/1.snap
+rm $send_files_dir/1.snap
+
+run_check $FSSUM_PROG -A -f -w $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
+run_check $FSSUM_PROG -A -f -w $send_files_dir/2.fssum $SCRATCH_MNT/mysnap2
+
+_run_btrfs_util_prog send $SCRATCH_MNT/mysnap1 -f $send_files_dir/1.snap
+_run_btrfs_util_prog send -p $SCRATCH_MNT/mysnap1 $SCRATCH_MNT/mysnap2 \
+	-f $send_files_dir/2.snap
+
+# Now recreate the filesystem by receiving both send streams and verify we get
+# the same content that the original filesystem had.
+_scratch_unmount
+_scratch_mkfs >>$seqres.full 2>&1
+_scratch_mount
+
+_run_btrfs_util_prog receive $SCRATCH_MNT -f $send_files_dir/1.snap
+run_check $FSSUM_PROG -r $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
+_run_btrfs_util_prog receive $SCRATCH_MNT -f $send_files_dir/2.snap
+run_check $FSSUM_PROG -r $send_files_dir/2.fssum $SCRATCH_MNT/mysnap2
+
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/btrfs/134.out b/tests/btrfs/134.out
new file mode 100644
index 0000000..829c30e
--- /dev/null
+++ b/tests/btrfs/134.out
@@ -0,0 +1,2 @@ 
+QA output created by 134
+Silence is golden
diff --git a/tests/btrfs/group b/tests/btrfs/group
index 779caec..831283e 100644
--- a/tests/btrfs/group
+++ b/tests/btrfs/group
@@ -136,3 +136,4 @@ 
 131 auto quick send
 132 auto quick send
 133 auto quick send
+134 auto quick send