#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (C) 2014 SUSE Linux Products GmbH. All Rights Reserved. # # FS QA Test No. btrfs/058 # # Regression test for a btrfs issue where we create a RO snapshot to use for # a send operation which fails with a -ESTALE error, due to the presence of # orphan inodes accessible through the snapshot's commit root but no longer # present through the main root. # # This issue is fixed by the following linux kernel btrfs patch: # # Btrfs: update commit root on snapshot creation after orphan cleanup # . ./common/preamble _begin_fstest auto quick send snapshot # Override the default cleanup function. _cleanup() { if [ ! -z $XFS_IO_PID ]; then kill $XFS_IO_PID > /dev/null 2>&1 fi rm -fr $tmp } . ./common/filter _supported_fs btrfs _require_scratch _require_xfs_io_command "-T" _scratch_mkfs >/dev/null 2>&1 _scratch_mount # Create a tmpfile file, write some data to it and leave it open, so that our # main subvolume has an orphan inode item. $XFS_IO_PROG -T $SCRATCH_MNT >>$seqres.full 2>&1 < <( echo "pwrite 0 65536" read ) & XFS_IO_PID=$! # Give it some time to the xfs_io process to create the tmpfile. sleep 3 # With the tmpfile open, create a RO snapshot and use it for a send operation. # The send operation used to fail with -ESTALE due to the presence of the # orphan inode. _btrfs subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap _btrfs send -f /dev/null $SCRATCH_MNT/mysnap status=0 exit