mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
5052c432b5
Clarification: EBUSY is what you get when trying to use the same upperdir/workdir with two different *concurent* overlayfs mounts. The EBUSY case is independent of the inodes index feature. This is not the case in this test, but rather the case of trying to reuse the same workdir with different upper dirs on *subsequent* overlayfs mounts. Signed-off-by: Amir Goldstein <amir73il@gmail.com> Reviewed-by: Eryu Guan <eguan@redhat.com> Signed-off-by: Eryu Guan <eguan@redhat.com>
98 lines
3.2 KiB
Bash
Executable File
98 lines
3.2 KiB
Bash
Executable File
#! /bin/bash
|
|
# FS QA Test 014
|
|
#
|
|
# Test copy-up of lowerdir with opaque xattr set.
|
|
#
|
|
# When copying up a directory with opaque xattr set, the xattr was copied up as
|
|
# well, after a remount the opaque flag is honored so the copied-up directory
|
|
# is treated as opaque, which causes files created in the lowerdir to be hidden
|
|
# when using multiple lower directories.
|
|
#
|
|
# This is fixed by "ovl: don't copy up opaqueness".
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
# Copyright (c) 2016 Red Hat Inc. All Rights Reserved.
|
|
#
|
|
# 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"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
status=1 # failure is the default!
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
rm -f $tmp.*
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
|
|
# remove previous $seqres.full before test
|
|
rm -f $seqres.full
|
|
|
|
# real QA test starts here
|
|
_supported_fs overlay
|
|
_supported_os Linux
|
|
_require_scratch
|
|
|
|
# Remove all files from previous tests
|
|
_scratch_mkfs
|
|
|
|
# Create multiple lowerdirs and upperdir, workdir, and testdir on lowerdir
|
|
lowerdir1=$OVL_BASE_SCRATCH_MNT/lower1
|
|
lowerdir2=$OVL_BASE_SCRATCH_MNT/lower2
|
|
upperdir=$OVL_BASE_SCRATCH_MNT/upper
|
|
workdir=$OVL_BASE_SCRATCH_MNT/workdir
|
|
# When overlay inode index feature is enabled, a workdir cannot be reused
|
|
# with a different upperdir. workdir2 in this test is used as the workdir
|
|
# when lowerdir2 is used as the upperdir.
|
|
workdir2=$OVL_BASE_SCRATCH_MNT/workdir2
|
|
mkdir -p $lowerdir1 $lowerdir2 $upperdir $workdir $workdir2
|
|
mkdir -p $lowerdir1/testdir/d
|
|
|
|
# mount overlay with $lowerdir2 as upperdir, and remove & recreate testdir,
|
|
# make testdir on $lowerdir2 opaque
|
|
_overlay_mount_dirs $lowerdir1 $lowerdir2 $workdir2 $OVL_BASE_SCRATCH_MNT $SCRATCH_MNT
|
|
rm -rf $SCRATCH_MNT/testdir
|
|
mkdir -p $SCRATCH_MNT/testdir/visibledir
|
|
# unmount overlayfs but not base fs
|
|
$UMOUNT_PROG $SCRATCH_MNT
|
|
|
|
# mount overlay again, with lowerdir1 and lowerdir2 as multiple lowerdirs,
|
|
# and create a new file in testdir, triggers copyup from lowerdir,
|
|
# copyup should not copy overlayfs private xattr
|
|
_overlay_mount_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir \
|
|
$OVL_BASE_SCRATCH_MNT $SCRATCH_MNT
|
|
touch $SCRATCH_MNT/testdir/visiblefile
|
|
|
|
# umount and mount overlay again, buggy kernel treats the copied-up dir as
|
|
# opaque, visibledir is not seen in merged dir.
|
|
$UMOUNT_PROG $SCRATCH_MNT
|
|
_overlay_mount_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir \
|
|
$OVL_BASE_SCRATCH_MNT $SCRATCH_MNT
|
|
ls $SCRATCH_MNT/testdir
|
|
|
|
# success, all done
|
|
status=0
|
|
exit
|