On Thu, Jan 5, 2017 at 2:45 AM, robbieko <robbieko@xxxxxxxxxxxx> wrote: > Filipe Manana 於 2017-01-04 21:09 寫到: > >> On Wed, Jan 4, 2017 at 10:53 AM, robbieko <robbieko@xxxxxxxxxxxx> wrote: >>> >>> From: Robbie Ko <robbieko@xxxxxxxxxxxx> >>> >>> Test that an incremental send operation dosen't' work because >>> it tries to update the time to a deleted directory after it finishes >>> a move operation. >>> >>> The other one is that an operation is applied to a file using the old >>> name not the new name. >>> >>> This test exercises scenarios used to fail in btrfs and are fixed by >>> the following patches for the linux kernel: >>> >>> "Btrfs: incremental send, add generation check for the inode waiting for >>> rmdir operation." >>> "Btrfs: incremental send, add generation check in existence >>> demtermination for the parent directory" >>> >>> Signed-off-by: Robbie Ko <robbieko@xxxxxxxxxxxx> >>> --- >>> V3: remove "run_" based helpers >>> V2: improve the change log >>> >>> tests/btrfs/132 | 123 >>> ++++++++++++++++++++++++++++++++++++++++++++++++++++ >>> tests/btrfs/132.out | 7 +++ >>> tests/btrfs/group | 1 + >>> 3 files changed, 131 insertions(+) >>> create mode 100755 tests/btrfs/132 >>> create mode 100644 tests/btrfs/132.out >>> >>> diff --git a/tests/btrfs/132 b/tests/btrfs/132 >>> new file mode 100755 >>> index 0000000..f1bb698 >>> --- /dev/null >>> +++ b/tests/btrfs/132 >>> @@ -0,0 +1,123 @@ >>> +#! /bin/bash >>> +# FS QA Test No. btrfs/132 >>> +# >>> +# Test that an incremental send operation dosen't' work because >>> +# it tries to update the time to a deleted directory after it finishes >>> +# a move operation. >>> +# >>> +# The other one is that an operation is applied to a file using the old >>> +# name not the new name. >>> +# >>> +#----------------------------------------------------------------------- >>> +# Copyright (C) 2016 Synology Inc. All Rights Reserved. >>> +# Author: Robbie Ko <robbieko@xxxxxxxxxxxx> >>> +# >>> +# 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/dir257 >>> +mkdir $SCRATCH_MNT/dir258 >>> +mkdir $SCRATCH_MNT/dir259 >>> +mv $SCRATCH_MNT/dir257 $SCRATCH_MNT/dir258/dir257 >>> + >>> +# Filesystem looks like: >>> +# >>> +# . (ino >>> 256) >>> +# |--- dir258/ (ino >>> 258) >>> +# | |--- dir257/ (ino >>> 257) >>> +# | >>> +# |--- dir259/ (ino >>> 259) >>> +# >>> +$BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT \ >>> + $SCRATCH_MNT/mysnap1 > /dev/null >>> + >>> +mv $SCRATCH_MNT/dir258/dir257 $SCRATCH_MNT/dir257 >>> +rmdir $SCRATCH_MNT/dir258 >>> +rmdir $SCRATCH_MNT/dir259 >>> +_scratch_unmount >>> +_scratch_mount >> >> >> Why do need to remount the fs? There's also a _scratch_remount function. >> >> Again, I would like to see comments in the test explaining why and >> how/why did the incremental send operation used to fail (like most of >> the existing send/receive tests have). >> >> thanks > > > Because we need to use the same inode 258 recreate, so need to delete the > old dir258 and dir259, then remount the fs, the next new file will be > generated > from inode 258. So you want to recreate the same inodes, with the same numbers but different generation values. You can get the same effect by using the mount option "-o inode_cache" (which is more obvious and doesn't rely on an implementation detail that is not guaranteed to exist forever). Again, as I said in my reply to some other test, this should be well explained as a comment in the test. thanks > > > thanks > >> >>> +touch $SCRATCH_MNT/file258 >>> +mkdir $SCRATCH_MNT/new_dir259 >>> +mv $SCRATCH_MNT/dir257 $SCRATCH_MNT/new_dir259/dir257 >>> + >>> +# Filesystem now looks like: >>> +# >>> +# . (ino >>> 256) >>> +# |--- file258 (ino >>> 258) >>> +# | >>> +# |--- new_dir259/ (ino >>> 259) >>> +# | |--- dir257/ (ino >>> 257) >>> +# >>> +$BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT \ >>> + $SCRATCH_MNT/mysnap2 > /dev/null >>> + >>> +$FSSUM_PROG -A -f -w $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1 >>> +$FSSUM_PROG -A -f -w $send_files_dir/2.fssum \ >>> + -x $SCRATCH_MNT/mysnap2/mysnap1 $SCRATCH_MNT/mysnap2 >>> + >>> +$BTRFS_UTIL_PROG send $SCRATCH_MNT/mysnap1 -f \ >>> + $send_files_dir/1.snap 2>&1 1>/dev/null | _filter_scratch >>> +$BTRFS_UTIL_PROG send -p $SCRATCH_MNT/mysnap1 $SCRATCH_MNT/mysnap2 \ >>> + -f $send_files_dir/2.snap 2>&1 1>/dev/null | _filter_scratch >>> + >>> +# 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 >>> + >>> +$BTRFS_UTIL_PROG receive $SCRATCH_MNT -f $send_files_dir/1.snap > >>> /dev/null >>> +$FSSUM_PROG -r $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1 >>> +$BTRFS_UTIL_PROG receive $SCRATCH_MNT -f $send_files_dir/2.snap > >>> /dev/null >>> +$FSSUM_PROG -r $send_files_dir/2.fssum $SCRATCH_MNT/mysnap2 >>> + >>> +echo "Silence is golden" >>> +status=0 >>> +exit >>> diff --git a/tests/btrfs/132.out b/tests/btrfs/132.out >>> new file mode 100644 >>> index 0000000..ff21547 >>> --- /dev/null >>> +++ b/tests/btrfs/132.out >>> @@ -0,0 +1,7 @@ >>> +QA output created by 132 >>> +At subvol SCRATCH_MNT/mysnap1 >>> +At subvol SCRATCH_MNT/mysnap2 >>> +At subvol mysnap1 >>> +OK >>> +OK >>> +Silence is golden >>> diff --git a/tests/btrfs/group b/tests/btrfs/group >>> index a7a070a..1b12382 100644 >>> --- a/tests/btrfs/group >>> +++ b/tests/btrfs/group >>> @@ -134,3 +134,4 @@ >>> 129 auto quick send >>> 130 auto clone send >>> 131 auto quick send >>> +132 auto quick send >>> -- >>> 1.9.1 >>> >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in >>> the body of a message to majordomo@xxxxxxxxxxxxxxx >>> More majordomo info at http://vger.kernel.org/majordomo-info.html -- Filipe David Manana, "People will forget what you said, people will forget what you did, but people will never forget how you made them feel." -- To unsubscribe from this list: send the line "unsubscribe fstests" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html