#! /bin/bash
# FS QA Test No. btrfs/133
#
# Test that an incremental send operation does not fail when a new inode
# replaces an old inode that has the same number but different generation,
# and both are direct children of the subvolume/snapshot root.
#
#-----------------------------------------------------------------------
# Copyright (C) 2017 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/a1
mkdir $SCRATCH_MNT/a2

# Filesystem looks like:
#
# .                                                             (ino 256)
# |--- a1/                                                      (ino 257)
# |--- a2/                                                      (ino 258)
#
$BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT \
    $SCRATCH_MNT/mysnap1 > /dev/null

$BTRFS_UTIL_PROG send -f $send_files_dir/1.snap \
	$SCRATCH_MNT/mysnap1 2>&1 1>/dev/null | _filter_scratch

_scratch_unmount
_scratch_mkfs >>$seqres.full 2>&1
_scratch_mount
touch $SCRATCH_MNT/a2

# Filesystem now looks like:
#
# .                                                             (ino 256)
# |--- a2                                                       (ino 257)
#
# Notice that at this point inode 257 has a generation with value 7, which is
# the generation value for a brand new filesystem.

# Now create the second snapshot. This makes the filesystem's current generation
# value to increase to the value 8, due to a transaction commit performed by the
# snapshot creation ioctl.
$BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT \
    $SCRATCH_MNT/mysnap2 > /dev/null

# Now receive the first snapshot created in the first filesystem.
# Before creating any inodes, the receive command creates the first snapshot,
# which causes a transaction commit and therefore bumps the filesystem's current
# generation to the value 9. All the inodes created end up getting a generation
# value of 9 and the snapshot's root inode (256) gets a generation value of 8.
$BTRFS_UTIL_PROG receive -f $send_files_dir/1.snap $SCRATCH_MNT > /dev/null
rm $send_files_dir/1.snap

$FSSUM_PROG -A -f -w $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
$FSSUM_PROG -A -f -w $send_files_dir/2.fssum $SCRATCH_MNT/mysnap2

$BTRFS_UTIL_PROG send -f $send_files_dir/1.snap \
	$SCRATCH_MNT/mysnap1 2>&1 1>/dev/null | _filter_scratch
$BTRFS_UTIL_PROG send -p $SCRATCH_MNT/mysnap1 -f $send_files_dir/2.snap \
	$SCRATCH_MNT/mysnap2 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.
# The receive for the second snapshot used to fail because the send stream had
# an operation to rename the new inode 257 (generation 7) from its orphan name
# to its final name (a2) before the operation to delete (rmdir) the inode 258.
_scratch_unmount
_scratch_mkfs >>$seqres.full 2>&1
_scratch_mount

$BTRFS_UTIL_PROG receive -f $send_files_dir/1.snap $SCRATCH_MNT > /dev/null
$FSSUM_PROG -r $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
$BTRFS_UTIL_PROG receive -f $send_files_dir/2.snap $SCRATCH_MNT > /dev/null
$FSSUM_PROG -r $send_files_dir/2.fssum $SCRATCH_MNT/mysnap2

status=0
exit
