mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
7e98d41a6e
Refactor every test in the entire test suite to use the new boilerplate functions. This also migrates all the test group information into the test files. This patch has been autogenerated via the command: ./tools/convert-group btrfs ceph cifs ext4 f2fs generic nfs ocfs2 overlay perf shared udf xfs Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Reviewed-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
136 lines
4.3 KiB
Bash
Executable File
136 lines
4.3 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (C) 2015 SUSE Linux Products GmbH. All Rights Reserved.
|
|
#
|
|
# FS QA Test No. btrfs/083
|
|
#
|
|
# Test for incremental send where the difference between the parent and child
|
|
# snapshots is that a directory A was renamed and a directory B was renamed to
|
|
# the name directory A had before (in the parent snapshot), but directory A's
|
|
# rename must happen before some other directory C is renamed.
|
|
#
|
|
# This issue was fixed by the following linux kernel btrfs patch:
|
|
#
|
|
# Btrfs: incremental send, don't rename a directory too soon
|
|
#
|
|
. ./common/preamble
|
|
_begin_fstest auto quick send
|
|
|
|
# Override the default cleanup function.
|
|
_cleanup()
|
|
{
|
|
rm -fr $send_files_dir
|
|
rm -f $tmp.*
|
|
}
|
|
|
|
# Import common functions.
|
|
. ./common/filter
|
|
|
|
# real QA test starts here
|
|
_supported_fs btrfs
|
|
_require_scratch
|
|
_require_fssum
|
|
|
|
send_files_dir=$TEST_DIR/btrfs-test-$seq
|
|
|
|
rm -fr $send_files_dir
|
|
mkdir $send_files_dir
|
|
|
|
_scratch_mkfs >>$seqres.full 2>&1
|
|
_scratch_mount
|
|
|
|
mkdir $SCRATCH_MNT/a
|
|
mkdir $SCRATCH_MNT/b
|
|
mkdir $SCRATCH_MNT/c
|
|
touch $SCRATCH_MNT/a/file
|
|
|
|
mkdir $SCRATCH_MNT/d
|
|
mkdir $SCRATCH_MNT/e
|
|
touch $SCRATCH_MNT/e/file2
|
|
mkdir $SCRATCH_MNT/f
|
|
|
|
# Filesystem looks like:
|
|
#
|
|
# . (ino 256)
|
|
# |---- a/ (ino 257)
|
|
# | |---- file (ino 260)
|
|
# |
|
|
# |---- b/ (ino 258)
|
|
# |---- c/ (ino 259)
|
|
# |---- d/ (ino 261)
|
|
# |---- e/ (ino 262)
|
|
# | |--- file2 (ino 263)
|
|
# |
|
|
# |---- f/ (ino 264)
|
|
#
|
|
_run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap1
|
|
|
|
# Now make inode 257 a child of inode 259 and rename inode 258 to the name that
|
|
# inode 257 had before. When the incremental send processes inode 257, it can't
|
|
# do the rename immediately because inode 259 must be renamed first, so inode's
|
|
# 257 rename is delayed and happens after the rename for inode 259 is done.
|
|
# Since send processes inodes by ascending order of their number, inode 258
|
|
# can't be renamed before inode 257 is renamed and therefore must be delayed
|
|
# as well. So the send stream must issue rename commands in the following order:
|
|
#
|
|
# 1 - rename inode 259 ('c' -> 'x')
|
|
# 2 - rename inode 257 ('a' -> 'x/y')
|
|
# 3 - rename inode 258 ('b' -> 'a')
|
|
#
|
|
# Before the fix mentioned above, the send stream attempted to rename inode 258
|
|
# before inode 257 was renamed, resulting in a client error mentioning
|
|
# 'directory not empty'.
|
|
#
|
|
# Same logic applies to 'd', 'e' and 'f', but the difference is that in the
|
|
# second snapshot 'e' is associated to an inode with a lower inode number than
|
|
# in the first snapshot.
|
|
#
|
|
mv $SCRATCH_MNT/c $SCRATCH_MNT/x
|
|
mv $SCRATCH_MNT/a $SCRATCH_MNT/x/y
|
|
mv $SCRATCH_MNT/b $SCRATCH_MNT/a
|
|
|
|
mv $SCRATCH_MNT/f $SCRATCH_MNT/f2
|
|
mv $SCRATCH_MNT/e $SCRATCH_MNT/f2/e2
|
|
mv $SCRATCH_MNT/d $SCRATCH_MNT/e
|
|
|
|
# Filesystem now looks like:
|
|
#
|
|
#
|
|
# . (ino 256)
|
|
# |---- a/ (ino 258)
|
|
# |---- x/ (ino 259)
|
|
# | |---- y/ (ino 257)
|
|
# | |----- file (ino 260)
|
|
# |
|
|
# |---- e/ (ino 261)
|
|
# |---- f2/ (ino 264)
|
|
# | |----- e2/ (ino 262)
|
|
# |---- file2 (ino 263)
|
|
|
|
_run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap2
|
|
|
|
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 \
|
|
-x $SCRATCH_MNT/mysnap2/mysnap1 $SCRATCH_MNT/mysnap2
|
|
|
|
_run_btrfs_util_prog send -f $send_files_dir/1.snap $SCRATCH_MNT/mysnap1
|
|
_run_btrfs_util_prog send -p $SCRATCH_MNT/mysnap1 -f $send_files_dir/2.snap \
|
|
$SCRATCH_MNT/mysnap2
|
|
|
|
# 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 -f $send_files_dir/1.snap $SCRATCH_MNT
|
|
run_check $FSSUM_PROG -r $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
|
|
|
|
_run_btrfs_util_prog receive -f $send_files_dir/2.snap $SCRATCH_MNT
|
|
run_check $FSSUM_PROG -r $send_files_dir/2.fssum $SCRATCH_MNT/mysnap2
|
|
|
|
echo "Silence is golden"
|
|
|
|
status=0
|
|
exit
|