* [PATCH v3 0/7] overlay: add fsck.overlay basic tests
@ 2018-01-12 12:05 zhangyi (F)
2018-01-12 12:05 ` [PATCH v3 1/7] overlay: add filesystem check helper zhangyi (F)
` (7 more replies)
0 siblings, 8 replies; 16+ messages in thread
From: zhangyi (F) @ 2018-01-12 12:05 UTC (permalink / raw)
To: linux-unionfs, fstests
Cc: miklos, amir73il, eguan, yi.zhang, miaoxie, yangerkun
Hi all:
Here is the third version of test cases for the upcoming fsck.overlay,
corresponding to fsck.overlay v4 (will post to github repository soon).
Test fsck.overlay check and fix inconsistency of whiteout and redirect/impure
xattr.
Changes since v2:
- Modify some minor suggestions from Amir and Vivek, and simplify code
in all three test cases.
- Fix duplicate redirect xattr test in 202.
- Add impure xattr test case of general merge directory in 'no impure'
parent directory.
- Fix fs check failure in other overlay fs test cases. PS: The
multi-lowers problem in overlay/010 also appears in many other tests,
_require_scratch() will mis-check the pre-defined underlying dirs
(not the real test dirs). I think they also need to be modified as this
patch(06/07) does to check the correct dirs, and I can fix them if you
think necessary.
------
Changes since v1:
- Fix _check_scratch_fs hook.
- Remove valid/invalid opaque xattr test.
- Add whiteout test cases of valid/invalid whiteouts in opaque/redirect
parent directory.
- Add impure xattr test.
zhangyi (F) (7):
overlay: add filesystem check helper
overlay: add fsck.overlay whiteout test
overlay: add fsck.overlay redirect directory test
overlay: add fsck.overlay impure xattr test
overlay/003: fix fs check failure
overlay/010: fix fs check failure
overlay/019: fix fs check failure
common/config | 1 +
common/overlay | 80 +++++++++++++++++
common/rc | 4 +-
tests/overlay/003 | 1 -
tests/overlay/010 | 11 +--
tests/overlay/019 | 2 +-
tests/overlay/201 | 232 ++++++++++++++++++++++++++++++++++++++++++++++++
tests/overlay/201.out | 10 +++
tests/overlay/202 | 240 ++++++++++++++++++++++++++++++++++++++++++++++++++
tests/overlay/202.out | 10 +++
tests/overlay/203 | 143 ++++++++++++++++++++++++++++++
tests/overlay/203.out | 4 +
tests/overlay/group | 3 +
13 files changed, 732 insertions(+), 9 deletions(-)
create mode 100755 tests/overlay/201
create mode 100644 tests/overlay/201.out
create mode 100755 tests/overlay/202
create mode 100644 tests/overlay/202.out
create mode 100755 tests/overlay/203
create mode 100644 tests/overlay/203.out
--
2.5.0
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v3 1/7] overlay: add filesystem check helper
2018-01-12 12:05 [PATCH v3 0/7] overlay: add fsck.overlay basic tests zhangyi (F)
@ 2018-01-12 12:05 ` zhangyi (F)
2018-01-12 12:05 ` [PATCH v3 2/7] overlay: add fsck.overlay whiteout test zhangyi (F)
` (6 subsequent siblings)
7 siblings, 0 replies; 16+ messages in thread
From: zhangyi (F) @ 2018-01-12 12:05 UTC (permalink / raw)
To: linux-unionfs, fstests
Cc: miklos, amir73il, eguan, yi.zhang, miaoxie, yangerkun
Add filesystem check helpers for the upcoming fsck.overlay utility,
and hook them to _check_test_fs and _check_scratch_fs. This helper
works only if fsck.overlay exists.
[ _check_test_fs/_check_scratch_fs part picked from Amir's patch, thanks ]
Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
---
common/config | 1 +
common/overlay | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
common/rc | 4 +--
3 files changed, 83 insertions(+), 2 deletions(-)
diff --git a/common/config b/common/config
index d0fbfe5..0505b71 100644
--- a/common/config
+++ b/common/config
@@ -236,6 +236,7 @@ case "$HOSTOS" in
export MKFS_REISER4_PROG="`set_prog_path mkfs.reiser4`"
export E2FSCK_PROG="`set_prog_path e2fsck`"
export TUNE2FS_PROG="`set_prog_path tune2fs`"
+ export FSCK_OVERLAY_PROG="`set_prog_path fsck.overlay`"
;;
esac
diff --git a/common/overlay b/common/overlay
index 1da4ab1..e7f0e62 100644
--- a/common/overlay
+++ b/common/overlay
@@ -151,3 +151,83 @@ _require_scratch_overlay_feature()
_notrun "${FSTYP} feature '${feature}' cannot be enabled on ${SCRATCH_DEV}"
_scratch_unmount
}
+
+_overlay_fsck_dirs()
+{
+ local lowerdir=$1
+ local upperdir=$2
+ local workdir=$3
+ local options=$4
+
+ [[ ! -x "$FSCK_OVERLAY_PROG" ]] && return 0
+
+ $FSCK_OVERLAY_PROG -o lowerdir=$lowerdir -o upperdir=$upperdir \
+ -o workdir=$workdir $options
+}
+
+_overlay_check_dirs()
+{
+ local lowerdir=$1
+ local upperdir=$2
+ local workdir=$3
+ local err=0
+
+ _overlay_fsck_dirs $* $FSCK_OPTIONS >>$tmp.fsck 2>&1
+ if [ $? -ne 0 ]; then
+ _log_err "_overlay_check_fs: overlayfs on $lowerdir,$upperdir,$workdir is inconsistent"
+ echo "*** fsck.overlay output ***" >>$seqres.full
+ cat $tmp.fsck >>$seqres.full
+ echo "*** end fsck.overlay output" >>$seqres.full
+
+ echo "*** mount output ***" >>$seqres.full
+ _mount >>$seqres.full
+ echo "*** end mount output" >>$seqres.full
+ err=1
+ fi
+ rm -f $tmp.fsck
+
+ if [ $err != 0 ]; then
+ status=1
+ if [ "$iam" != "check" ]; then
+ exit 1
+ fi
+ return 1
+ fi
+
+ return 0
+}
+
+_overlay_check_fs()
+{
+ local base_dev=$3
+ local base_mnt=$4
+
+ [ "$FSTYP" = overlay ] || return 0
+
+ # Base fs needs to be mounted to check overlay dirs
+ local mounted=""
+ [ -z "$base_dev" ] || mounted=`_is_mounted $base_dev`
+ [ -n "$mounted" ] || _overlay_base_mount $*
+
+ # No need to umount overlay for dir checks with default -n option
+ _overlay_check_dirs $base_mnt/$OVL_LOWER $base_mnt/$OVL_UPPER \
+ $base_mnt/$OVL_WORK
+ local ret=$?
+
+ [ -n "$mounted" ] || _overlay_base_unmount "$base_dev" "$base_mnt"
+ return $ret
+}
+
+_check_overlay_test_fs()
+{
+ _overlay_check_fs OVL_BASE_TEST_DEV OVL_BASE_TEST_DIR \
+ "$OVL_BASE_TEST_DEV" "$OVL_BASE_TEST_DIR" \
+ $TEST_FS_MOUNT_OPTS $SELINUX_MOUNT_OPTIONS
+}
+
+_check_overlay_scratch_fs()
+{
+ _overlay_check_fs OVL_BASE_SCRATCH_DEV OVL_BASE_SCRATCH_MNT \
+ "$OVL_BASE_SCRATCH_DEV" "$OVL_BASE_SCRATCH_MNT" \
+ $OVL_BASE_MOUNT_OPTIONS $SELINUX_MOUNT_OPTIONS
+}
diff --git a/common/rc b/common/rc
index 9216efd..a49f736 100644
--- a/common/rc
+++ b/common/rc
@@ -2537,7 +2537,7 @@ _check_test_fs()
# no way to check consistency for GlusterFS
;;
overlay)
- # no way to check consistency for overlay
+ _check_overlay_test_fs
;;
pvfs2)
;;
@@ -2592,7 +2592,7 @@ _check_scratch_fs()
# no way to check consistency for GlusterFS
;;
overlay)
- # no way to check consistency for overlay
+ _check_overlay_scratch_fs
;;
pvfs2)
;;
--
2.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 2/7] overlay: add fsck.overlay whiteout test
2018-01-12 12:05 [PATCH v3 0/7] overlay: add fsck.overlay basic tests zhangyi (F)
2018-01-12 12:05 ` [PATCH v3 1/7] overlay: add filesystem check helper zhangyi (F)
@ 2018-01-12 12:05 ` zhangyi (F)
2018-01-12 20:58 ` Amir Goldstein
2018-01-12 12:05 ` [PATCH v3 3/7] overlay: add fsck.overlay redirect directory test zhangyi (F)
` (5 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: zhangyi (F) @ 2018-01-12 12:05 UTC (permalink / raw)
To: linux-unionfs, fstests
Cc: miklos, amir73il, eguan, yi.zhang, miaoxie, yangerkun
Add fsck.overlay test case to test it how to deal with orphan/valid
whiteouts in underlying directories of overlayfs.
Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
---
tests/overlay/201 | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++
tests/overlay/201.out | 10 +++
tests/overlay/group | 1 +
3 files changed, 243 insertions(+)
create mode 100755 tests/overlay/201
create mode 100644 tests/overlay/201.out
diff --git a/tests/overlay/201 b/tests/overlay/201
new file mode 100755
index 0000000..fbb9898
--- /dev/null
+++ b/tests/overlay/201
@@ -0,0 +1,232 @@
+#! /bin/bash
+# FS QA Test 201
+#
+# Test fsck.overlay how to deal with whiteouts in overlayfs.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2017 Huawei. All Rights Reserved.
+# Author: zhangyi (F) <yi.zhang@huawei.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"
+
+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
+_require_command "$FSCK_OVERLAY_PROG" fsck.overlay
+
+# remove all files from previous tests
+_scratch_mkfs
+
+OVL_REDIRECT_XATTR="trusted.overlay.redirect"
+OVL_OPAQUE_XATTR="trusted.overlay.opaque"
+OVL_OPAQUE_XATTR_VAL="y"
+
+# Check whiteout
+check_whiteout()
+{
+ for arg in $*
+ do
+ local ttype=`stat -c "%F:%t,%T" $arg`
+
+ [[ $ttype == "character special file:0,0" ]] || \
+ echo "Valid whiteout removed incorrectly"
+ done
+}
+
+# Create a whiteout
+make_whiteout()
+{
+ for arg in $*
+ do
+ mknod $arg c 0 0
+ done
+}
+
+# Create an opaque directory
+make_opaque_dir()
+{
+ local target=$1
+
+ mkdir -p $target
+ $SETFATTR_PROG -n $OVL_OPAQUE_XATTR -v $OVL_OPAQUE_XATTR_VAL $target
+}
+
+# Create a redirect directory
+make_redirect_dir()
+{
+ local target=$1
+ local value=$2
+
+ mkdir -p $target
+ $SETFATTR_PROG -n $OVL_REDIRECT_XATTR -v $value $target
+}
+
+# Create test directories
+lowerdir=$OVL_BASE_SCRATCH_MNT/lower
+lowerdir2=$OVL_BASE_SCRATCH_MNT/lower2
+upperdir=$OVL_BASE_SCRATCH_MNT/upper
+workdir=$OVL_BASE_SCRATCH_MNT/workdir
+
+make_test_dirs()
+{
+ rm -rf $lowerdir $lowerdir2 $upperdir $workdir
+ mkdir -p $lowerdir $lowerdir2 $upperdir $workdir
+}
+
+# Test orphan whiteout in lower and upper layer, should remove
+echo "+ Orphan whiteout"
+make_test_dirs
+make_whiteout $lowerdir/foo $upperdir/{foo,bar}
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+ls $lowerdir
+ls $upperdir
+
+# Test valid whiteout covering lower target, should not remove
+echo "+ Valid whiteout"
+make_test_dirs
+touch $lowerdir2/{foo,bar}
+make_whiteout $upperdir/foo $lowerdir/bar
+
+_overlay_fsck_dirs "$lowerdir:$lowerdir2" $upperdir $workdir -p >> \
+ $seqres.full 2>&1 || _fail "fsck should not fail"
+check_whiteout $upperdir/foo $lowerdir/bar
+
+# Test orphan whiteout in opaque directory, should remove
+echo "+ Orphan whiteout(2)"
+make_test_dirs
+mkdir $lowerdir/testdir
+touch $lowerdir/testdir/foo
+make_opaque_dir $upperdir/testdir
+make_whiteout $upperdir/testdir/foo
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+ls $upperdir/testdir
+
+# Test orphan whiteout whose parent path is not an merged directory,
+# should remove
+echo "+ Orphan whiteout(3)"
+make_test_dirs
+mkdir $lowerdir2/{testdir1,testdir2,testdir3}
+touch $lowerdir2/{testdir1/foo,testdir2/foo,testdir3/foo}
+mkdir $upperdir/{testdir1,testdir2,testdir3,testdir4}
+touch $lowerdir/testdir1
+make_whiteout $lowerdir/testdir2
+make_opaque_dir $lowerdir/testdir3
+make_whiteout $upperdir/{testdir1/foo,/testdir2/foo,testdir3/foo,testdir4/foo}
+
+_overlay_fsck_dirs "$lowerdir:$lowerdir2" $upperdir $workdir -p >> \
+ $seqres.full 2>&1 || _fail "fsck should not fail"
+ls $upperdir/testdir1
+ls $upperdir/testdir2
+ls $upperdir/testdir3
+ls $upperdir/testdir4
+
+# Test orphan whiteout in redirect directory, should remove
+echo "+ Orphan whiteout(4)"
+make_test_dirs
+mkdir $lowerdir/{testdir,origin}
+touch $lowerdir/testdir/foo
+make_redirect_dir $upperdir/testdir "origin"
+make_whiteout $upperdir/testdir/foo
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+ls $upperdir/testdir
+
+# Test valid whiteout in redirect directory cover file in lower
+# redirect origin directory, should not remove
+echo "+ Valid whiteout(2)"
+make_test_dirs
+mkdir $lowerdir/origin
+touch $lowerdir/origin/foo
+make_redirect_dir $upperdir/testdir "origin"
+make_whiteout $upperdir/testdir/foo
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_whiteout $upperdir/testdir/foo
+
+# Test valid whiteout covering lower target whose parent directory
+# merge with a redirect directory in the middle layer, should not remove.
+echo "+ Valid whiteout(3)"
+make_test_dirs
+mkdir -p $lowerdir2/origin/subdir
+touch $lowerdir2/origin/subdir/foo
+make_redirect_dir $lowerdir/testdir "origin"
+mkdir -p $upperdir/testdir/subdir
+make_whiteout $upperdir/testdir/subdir/foo
+
+_overlay_fsck_dirs "$lowerdir:$lowerdir2" $upperdir $workdir -p \
+ >> $seqres.full 2>&1 || _fail "fsck should not fail"
+check_whiteout $upperdir/testdir/subdir/foo
+
+# Test invalid whiteout in opaque subdirectory in a redirect directory,
+# should remove
+echo "+ Orphan whiteout(5)"
+make_test_dirs
+mkdir -p $lowerdir/origin/subdir
+touch $lowerdir/origin/subdir/foo
+make_redirect_dir $upperdir/testdir "origin"
+make_opaque_dir $upperdir/testdir/subdir
+make_whiteout $upperdir/testdir/subdir/foo
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+ls $upperdir/testdir/subdir
+
+# Test valid whiteout in reidrect subdirectory in a opaque directory
+# covering lower target, should not remove
+echo "+ Valid whiteout(4)"
+make_test_dirs
+mkdir $lowerdir/origin
+touch $lowerdir/origin/foo
+make_opaque_dir $upperdir/testdir
+make_redirect_dir $upperdir/testdir/subdir "/origin"
+make_whiteout $upperdir/testdir/subdir/foo
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_whiteout $upperdir/testdir/subdir/foo
+
+# success, all done
+status=0
+exit
diff --git a/tests/overlay/201.out b/tests/overlay/201.out
new file mode 100644
index 0000000..157bb85
--- /dev/null
+++ b/tests/overlay/201.out
@@ -0,0 +1,10 @@
+QA output created by 201
++ Orphan whiteout
++ Valid whiteout
++ Orphan whiteout(2)
++ Orphan whiteout(3)
++ Orphan whiteout(4)
++ Valid whiteout(2)
++ Valid whiteout(3)
++ Orphan whiteout(5)
++ Valid whiteout(4)
diff --git a/tests/overlay/group b/tests/overlay/group
index 7e541e4..7c5fcbb 100644
--- a/tests/overlay/group
+++ b/tests/overlay/group
@@ -49,3 +49,4 @@
044 auto quick copyup hardlink nonsamefs
047 auto quick copyup hardlink
048 auto quick copyup hardlink
+201 auto quick fsck
--
2.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 3/7] overlay: add fsck.overlay redirect directory test
2018-01-12 12:05 [PATCH v3 0/7] overlay: add fsck.overlay basic tests zhangyi (F)
2018-01-12 12:05 ` [PATCH v3 1/7] overlay: add filesystem check helper zhangyi (F)
2018-01-12 12:05 ` [PATCH v3 2/7] overlay: add fsck.overlay whiteout test zhangyi (F)
@ 2018-01-12 12:05 ` zhangyi (F)
2018-01-12 21:32 ` Amir Goldstein
2018-01-12 12:05 ` [PATCH v3 4/7] overlay: add fsck.overlay impure xattr test zhangyi (F)
` (4 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: zhangyi (F) @ 2018-01-12 12:05 UTC (permalink / raw)
To: linux-unionfs, fstests
Cc: miklos, amir73il, eguan, yi.zhang, miaoxie, yangerkun
Add fsck.overlay test case to test it how to deal with invalid/valid/
duplicate redirect xattr in underlying directories of overlayfs.
Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
---
tests/overlay/202 | 240 ++++++++++++++++++++++++++++++++++++++++++++++++++
tests/overlay/202.out | 10 +++
tests/overlay/group | 1 +
3 files changed, 251 insertions(+)
create mode 100755 tests/overlay/202
create mode 100644 tests/overlay/202.out
diff --git a/tests/overlay/202 b/tests/overlay/202
new file mode 100755
index 0000000..84a7bad
--- /dev/null
+++ b/tests/overlay/202
@@ -0,0 +1,240 @@
+#! /bin/bash
+# FS QA Test 202
+#
+# Test fsck.overlay how to deal with redirect xattr in overlayfs.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2017 Huawei. All Rights Reserved.
+# Author: zhangyi (F) <yi.zhang@huawei.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"
+
+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
+. ./common/attr
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# real QA test starts here
+_supported_fs overlay
+_supported_os Linux
+_require_scratch
+_require_attrs
+_require_command "$FSCK_OVERLAY_PROG" fsck.overlay
+
+# remove all files from previous tests
+_scratch_mkfs
+
+OVL_REDIRECT_XATTR="trusted.overlay.redirect"
+OVL_OPAQUE_XATTR="trusted.overlay.opaque"
+OVL_OPAQUE_XATTR_VAL="y"
+
+# Create a redirect directory
+make_redirect_dir()
+{
+ local target=$1
+ local value=$2
+
+ mkdir -p $target
+ $SETFATTR_PROG -n $OVL_REDIRECT_XATTR -v $value $target
+}
+
+# Check redirect xattr
+check_redirect()
+{
+ local target=$1
+ local expect=$2
+
+ value=$($GETFATTR_PROG --absolute-names --only-values -n \
+ $OVL_REDIRECT_XATTR $target)
+
+ [[ $value == $expect ]] || echo "Redirect xattr incorrect"
+}
+
+check_no_redirect()
+{
+ local target=$1
+
+ value=$($GETFATTR_PROG --absolute-names -d -m \
+ $OVL_REDIRECT_XATTR $target)
+
+ [[ -z "$value" ]] || echo "Redirect xattr not empty"
+}
+
+# Check opaque xattr
+check_opaque()
+{
+ local target=$1
+
+ value=$($GETFATTR_PROG --absolute-names --only-values -n \
+ $OVL_OPAQUE_XATTR $target)
+
+ [[ $value == $OVL_OPAQUE_XATTR_VAL ]] || echo "Opaque xattr incorrect"
+}
+
+# Check whiteout
+check_whiteout()
+{
+ local target=$1
+
+ target_type=`stat -c "%F:%t,%T" $target`
+
+ [[ $target_type == "character special file:0,0" ]] || \
+ echo "Whiteout missing"
+}
+
+# Create test directories
+lowerdir=$OVL_BASE_SCRATCH_MNT/lower
+lowerdir2=$OVL_BASE_SCRATCH_MNT/lower2
+upperdir=$OVL_BASE_SCRATCH_MNT/upper
+workdir=$OVL_BASE_SCRATCH_MNT/workdir
+
+make_test_dirs()
+{
+ rm -rf $lowerdir $lowerdir2 $upperdir $workdir
+ mkdir -p $lowerdir $lowerdir2 $upperdir $workdir
+}
+
+# Test invalid redirect xattr point to a nonexistent origin, should remove
+echo "+ Invalid redirect"
+make_test_dirs
+make_redirect_dir $upperdir/testdir "invalid"
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_no_redirect $upperdir/testdir
+
+# Test invalid redirect xattr point to a file origin, should remove
+echo "+ Invalid redirect(2)"
+make_test_dirs
+touch $lowerdir/origin
+make_redirect_dir $upperdir/testdir "origin"
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_no_redirect $upperdir/testdir
+
+# Test valid redirect xattr point to a directory origin in the same directory,
+# should not remove
+echo "+ Valid redirect"
+make_test_dirs
+mkdir $lowerdir/origin
+mknod $upperdir/origin c 0 0
+make_redirect_dir $upperdir/testdir "origin"
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_redirect $upperdir/testdir "origin"
+
+# Test valid redirect xattr point to a directory origin in different directories
+# should not remove
+echo "+ Valid redirect(2)"
+make_test_dirs
+mkdir $lowerdir/origin
+mknod $upperdir/origin c 0 0
+make_redirect_dir $upperdir/testdir1/testdir2 "/origin"
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_redirect $upperdir/testdir1/testdir2 "/origin"
+
+# Test valid redirect xattr but missing whiteout to cover lower target,
+# should fix whiteout
+echo "+ Missing whiteout"
+make_test_dirs
+mkdir $lowerdir/origin
+make_redirect_dir $upperdir/testdir "origin"
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_redirect $upperdir/testdir "origin"
+check_whiteout $upperdir/origin
+
+# Test valid redirect xattrs exchanged by rename, should not remove
+echo "+ Valid redirect(3)"
+make_test_dirs
+mkdir $lowerdir/{testdir1,testdir2}
+make_redirect_dir $upperdir/testdir1 "testdir2"
+make_redirect_dir $upperdir/testdir2 "testdir1"
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_redirect $upperdir/testdir1 "testdir2"
+check_redirect $upperdir/testdir2 "testdir1"
+
+# Test invalid redirect xattr with lower same name directory exists,
+# should remove invalid redirect xattr and set opaque in yes mode
+echo "+ Invalid redirect(3)"
+make_test_dirs
+mkdir $lowerdir/testdir
+make_redirect_dir $upperdir/testdir "invalid"
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -y >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_no_redirect $upperdir/testdir
+check_opaque $upperdir/testdir
+
+# Test duplicate redirect xattrs point to one origin, should fail in
+# auto mode, and should remove the duplicate one in yes mode
+echo "+ Duplicate redirect"
+make_test_dirs
+mkdir $lowerdir2/origin
+make_redirect_dir $lowerdir/testdir1 "origin"
+make_redirect_dir $lowerdir/testdir2 "origin"
+make_redirect_dir $upperdir/testdir3 "origin"
+
+_overlay_fsck_dirs "$lowerdir:$lowerdir2" $upperdir $workdir -p >> \
+ $seqres.full 2>&1 && _fail "fsck should fail"
+_overlay_fsck_dirs "$lowerdir:$lowerdir2" $upperdir $workdir -y >> \
+ $seqres.full 2>&1 || _fail "fsck should not fail"
+redirect_1=`check_redirect $lowerdir/testdir1 "origin" 2>/dev/null`
+redirect_2=`check_redirect $lowerdir/testdir2 "origin" 2>/dev/null`
+[[ $redirect_1 == $redirect_2 ]] && echo "Redirect xattr incorrect"
+check_no_redirect $upperdir/testdir3
+
+# Test duplicate redirect xattr duplicate with merge directory, should
+# fail in auto mode, and should remove the redirect directory in yes mode
+echo "+ Duplicate redirect(2)"
+make_test_dirs
+mkdir $lowerdir/origin $upperdir/origin
+make_redirect_dir $upperdir/testdir "origin"
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 && \
+ _fail "fsck should fail"
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -y >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_no_redirect $upperdir/testdir
+
+# success, all done
+status=0
+exit
diff --git a/tests/overlay/202.out b/tests/overlay/202.out
new file mode 100644
index 0000000..8473336
--- /dev/null
+++ b/tests/overlay/202.out
@@ -0,0 +1,10 @@
+QA output created by 202
++ Invalid redirect
++ Invalid redirect(2)
++ Valid redirect
++ Valid redirect(2)
++ Missing whiteout
++ Valid redirect(3)
++ Invalid redirect(3)
++ Duplicate redirect
++ Duplicate redirect(2)
diff --git a/tests/overlay/group b/tests/overlay/group
index 7c5fcbb..e39b5e0 100644
--- a/tests/overlay/group
+++ b/tests/overlay/group
@@ -50,3 +50,4 @@
047 auto quick copyup hardlink
048 auto quick copyup hardlink
201 auto quick fsck
+202 auto quick fsck
--
2.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 4/7] overlay: add fsck.overlay impure xattr test
2018-01-12 12:05 [PATCH v3 0/7] overlay: add fsck.overlay basic tests zhangyi (F)
` (2 preceding siblings ...)
2018-01-12 12:05 ` [PATCH v3 3/7] overlay: add fsck.overlay redirect directory test zhangyi (F)
@ 2018-01-12 12:05 ` zhangyi (F)
2018-01-12 20:52 ` Amir Goldstein
2018-01-12 12:05 ` [PATCH v3 5/7] overlay/003: fix fs check failure zhangyi (F)
` (3 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: zhangyi (F) @ 2018-01-12 12:05 UTC (permalink / raw)
To: linux-unionfs, fstests
Cc: miklos, amir73il, eguan, yi.zhang, miaoxie, yangerkun
Add fsck.overlay test case to test it how to deal with impure
xattr in underlying directories of overlayfs.
Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
---
tests/overlay/203 | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++
tests/overlay/203.out | 4 ++
tests/overlay/group | 1 +
3 files changed, 148 insertions(+)
create mode 100755 tests/overlay/203
create mode 100644 tests/overlay/203.out
diff --git a/tests/overlay/203 b/tests/overlay/203
new file mode 100755
index 0000000..82b224b
--- /dev/null
+++ b/tests/overlay/203
@@ -0,0 +1,143 @@
+#! /bin/bash
+# FS QA Test 203
+#
+# Test fsck.overlay how to deal with impure xattr in overlayfs.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2017 Huawei. All Rights Reserved.
+# Author: zhangyi (F) <yi.zhang@huawei.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"
+
+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
+_require_command "$FSCK_OVERLAY_PROG" fsck.overlay
+
+# remove all files from previous tests
+_scratch_mkfs
+
+OVL_REDIRECT_XATTR="trusted.overlay.redirect"
+OVL_IMPURE_XATTR="trusted.overlay.impure"
+OVL_IMPURE_XATTR_VAL="y"
+
+# Create a redirect directory
+make_redirect_dir()
+{
+ local target=$1
+ local value=$2
+
+ mkdir -p $target
+ $SETFATTR_PROG -n $OVL_REDIRECT_XATTR -v $value $target
+}
+
+# Remove impure xattr
+remove_impure()
+{
+ local target=$1
+
+ $SETFATTR_PROG -x $OVL_IMPURE_XATTR $target
+}
+
+# Check impure xattr
+check_impure()
+{
+ local target=$1
+
+ value=$($GETFATTR_PROG --absolute-names --only-values -n \
+ $OVL_IMPURE_XATTR $target)
+
+ [[ $value == $OVL_IMPURE_XATTR_VAL ]] || echo "Missing impure xattr"
+}
+
+# Create test directories
+lowerdir=$OVL_BASE_SCRATCH_MNT/lower
+lowerdir2=$OVL_BASE_SCRATCH_MNT/lower2
+upperdir=$OVL_BASE_SCRATCH_MNT/upper
+workdir=$OVL_BASE_SCRATCH_MNT/workdir
+
+make_test_dirs()
+{
+ rm -rf $lowerdir $lowerdir2 $upperdir $workdir
+ mkdir -p $lowerdir $lowerdir2 $upperdir $workdir
+}
+
+# Test missing impure xattr in directory which has origin targets, should fix
+echo "+ Missing impure"
+make_test_dirs
+mkdir $lowerdir/{testdir1,testdir2}
+mkdir $upperdir/{testdir1,testdir2}
+touch $lowerdir/testdir1/foo
+mkdir $lowerdir/testdir2/subdir
+_overlay_scratch_mount_dirs $lowerdir $upperdir $workdir
+touch $SCRATCH_MNT/testdir1/foo
+touch $SCRATCH_MNT/testdir2/subdir
+$UMOUNT_PROG $SCRATCH_MNT
+remove_impure $upperdir/testdir1
+remove_impure $upperdir/testdir2
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_impure $upperdir/testdir1
+check_impure $upperdir/testdir2
+
+# Test missing impure xattr in directory which has redirect directories,
+# should fix
+echo "+ Missing impure(2)"
+make_test_dirs
+mkdir $lowerdir/origin
+make_redirect_dir $upperdir/testdir/subdir "/origin"
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_impure $upperdir/testdir
+
+# Test missing impure xattr in directory which has merge directories,
+# should fix
+echo "+ Missing impure(3)"
+make_test_dirs
+mkdir $lowerdir/testdir $upperdir/testdir
+
+_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
+ _fail "fsck should not fail"
+check_impure $upperdir
+
+# success, all done
+status=0
+exit
diff --git a/tests/overlay/203.out b/tests/overlay/203.out
new file mode 100644
index 0000000..dd81788
--- /dev/null
+++ b/tests/overlay/203.out
@@ -0,0 +1,4 @@
+QA output created by 203
++ Missing impure
++ Missing impure(2)
++ Missing impure(3)
diff --git a/tests/overlay/group b/tests/overlay/group
index e39b5e0..f99d89e 100644
--- a/tests/overlay/group
+++ b/tests/overlay/group
@@ -51,3 +51,4 @@
048 auto quick copyup hardlink
201 auto quick fsck
202 auto quick fsck
+203 auto quick fsck
--
2.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 5/7] overlay/003: fix fs check failure
2018-01-12 12:05 [PATCH v3 0/7] overlay: add fsck.overlay basic tests zhangyi (F)
` (3 preceding siblings ...)
2018-01-12 12:05 ` [PATCH v3 4/7] overlay: add fsck.overlay impure xattr test zhangyi (F)
@ 2018-01-12 12:05 ` zhangyi (F)
2018-01-12 19:12 ` Amir Goldstein
2018-01-12 12:05 ` [PATCH v3 6/7] overlay/010: " zhangyi (F)
` (2 subsequent siblings)
7 siblings, 1 reply; 16+ messages in thread
From: zhangyi (F) @ 2018-01-12 12:05 UTC (permalink / raw)
To: linux-unionfs, fstests
Cc: miklos, amir73il, eguan, yi.zhang, miaoxie, yangerkun
_check_overlay_scratch_fs() will check lowerdir of overlay filesystem,
this case remove this directory after test will lead to check failure,
and it is not really necessary to remove this directory, so keep this
directory.
Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
---
tests/overlay/003 | 1 -
1 file changed, 1 deletion(-)
diff --git a/tests/overlay/003 b/tests/overlay/003
index f980edb..154531e 100755
--- a/tests/overlay/003
+++ b/tests/overlay/003
@@ -92,7 +92,6 @@ ls ${SCRATCH_MNT}/
# unmount overlayfs but not base fs
$UMOUNT_PROG $SCRATCH_MNT
-rm -rf $lowerdir
echo "Silence is golden"
# success, all done
status=0
--
2.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 6/7] overlay/010: fix fs check failure
2018-01-12 12:05 [PATCH v3 0/7] overlay: add fsck.overlay basic tests zhangyi (F)
` (4 preceding siblings ...)
2018-01-12 12:05 ` [PATCH v3 5/7] overlay/003: fix fs check failure zhangyi (F)
@ 2018-01-12 12:05 ` zhangyi (F)
2018-01-12 19:10 ` Amir Goldstein
2018-01-12 12:05 ` [PATCH v3 7/7] overlay/019: " zhangyi (F)
2018-01-12 19:19 ` [PATCH v3 0/7] overlay: add fsck.overlay basic tests Amir Goldstein
7 siblings, 1 reply; 16+ messages in thread
From: zhangyi (F) @ 2018-01-12 12:05 UTC (permalink / raw)
To: linux-unionfs, fstests
Cc: miklos, amir73il, eguan, yi.zhang, miaoxie, yangerkun
This test use ovl_lower.1/ovl_lower.2 and ovl_upper in scratch
filesystem as underlying directories of overlay filesystem, but
_check_overlay_scratch_fs() only check ovl_lower and ovl_upper
directories. So whiteout "testdir" in ovl_upper becomes an orphan
whiteout, which will lead to fsck.overlay check failure.
This patch change to invoke _overlay_check_dirs() to check real
test dirs instead of pre-defined common dirs.
Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
---
tests/overlay/010 | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/tests/overlay/010 b/tests/overlay/010
index f55ebec..d6b7180 100755
--- a/tests/overlay/010
+++ b/tests/overlay/010
@@ -48,17 +48,17 @@ rm -f $seqres.full
# real QA test starts here
_supported_fs overlay
_supported_os Linux
-_require_scratch
+_require_scratch_nocheck
# Remove all files from previous tests
_scratch_mkfs
# Need two lower dirs in this test, and we mount overlay ourselves,
# create upper and workdir as well
-lowerdir1=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER.1
-lowerdir2=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER.2
-upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER
-workdir=$OVL_BASE_SCRATCH_MNT/$OVL_WORK
+lowerdir1=$OVL_BASE_SCRATCH_MNT/lower1
+lowerdir2=$OVL_BASE_SCRATCH_MNT/lower2
+upperdir=$OVL_BASE_SCRATCH_MNT/upper
+workdir=$OVL_BASE_SCRATCH_MNT/work
mkdir -p $lowerdir1 $lowerdir2 $upperdir $workdir
# One lowerdir contains test dir and test files, the other contains whiteout
@@ -70,6 +70,7 @@ mknod $lowerdir2/testdir/a c 0 0
_overlay_scratch_mount_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir
rm -rf $SCRATCH_MNT/testdir
+_overlay_check_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir
# success, all done
echo "Silence is golden"
status=0
--
2.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v3 7/7] overlay/019: fix fs check failure
2018-01-12 12:05 [PATCH v3 0/7] overlay: add fsck.overlay basic tests zhangyi (F)
` (5 preceding siblings ...)
2018-01-12 12:05 ` [PATCH v3 6/7] overlay/010: " zhangyi (F)
@ 2018-01-12 12:05 ` zhangyi (F)
2018-01-12 19:10 ` Amir Goldstein
2018-01-12 19:19 ` [PATCH v3 0/7] overlay: add fsck.overlay basic tests Amir Goldstein
7 siblings, 1 reply; 16+ messages in thread
From: zhangyi (F) @ 2018-01-12 12:05 UTC (permalink / raw)
To: linux-unionfs, fstests
Cc: miklos, amir73il, eguan, yi.zhang, miaoxie, yangerkun
This is a stability test, fsstress will create a lot of orphan
whiteouts in lowerdir, which will lead to inconsistency of overlay
image and fs check failure. No need to check this manual craft
file system, so just skip fs check.
Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
---
tests/overlay/019 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/overlay/019 b/tests/overlay/019
index 3e2bc4e..575aaf7 100755
--- a/tests/overlay/019
+++ b/tests/overlay/019
@@ -46,7 +46,7 @@ rm -f $seqres.full
# real QA test starts here
_supported_fs overlay
_supported_os Linux
-_require_scratch
+_require_scratch_nocheck
# Remove all files from previous tests
_scratch_mkfs
--
2.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v3 7/7] overlay/019: fix fs check failure
2018-01-12 12:05 ` [PATCH v3 7/7] overlay/019: " zhangyi (F)
@ 2018-01-12 19:10 ` Amir Goldstein
0 siblings, 0 replies; 16+ messages in thread
From: Amir Goldstein @ 2018-01-12 19:10 UTC (permalink / raw)
To: zhangyi (F)
Cc: overlayfs, fstests, Miklos Szeredi, Eryu Guan, Miao Xie,
yangerkun
On Fri, Jan 12, 2018 at 2:05 PM, zhangyi (F) <yi.zhang@huawei.com> wrote:
> This is a stability test, fsstress will create a lot of orphan
> whiteouts in lowerdir, which will lead to inconsistency of overlay
> image and fs check failure. No need to check this manual craft
> file system, so just skip fs check.
>
> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
Looks correct
> ---
> tests/overlay/019 | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tests/overlay/019 b/tests/overlay/019
> index 3e2bc4e..575aaf7 100755
> --- a/tests/overlay/019
> +++ b/tests/overlay/019
> @@ -46,7 +46,7 @@ rm -f $seqres.full
> # real QA test starts here
> _supported_fs overlay
> _supported_os Linux
> -_require_scratch
> +_require_scratch_nocheck
>
> # Remove all files from previous tests
> _scratch_mkfs
> --
> 2.9.5
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v3 6/7] overlay/010: fix fs check failure
2018-01-12 12:05 ` [PATCH v3 6/7] overlay/010: " zhangyi (F)
@ 2018-01-12 19:10 ` Amir Goldstein
0 siblings, 0 replies; 16+ messages in thread
From: Amir Goldstein @ 2018-01-12 19:10 UTC (permalink / raw)
To: zhangyi (F)
Cc: overlayfs, fstests, Miklos Szeredi, Eryu Guan, Miao Xie,
yangerkun
On Fri, Jan 12, 2018 at 2:05 PM, zhangyi (F) <yi.zhang@huawei.com> wrote:
> This test use ovl_lower.1/ovl_lower.2 and ovl_upper in scratch
> filesystem as underlying directories of overlay filesystem, but
> _check_overlay_scratch_fs() only check ovl_lower and ovl_upper
> directories. So whiteout "testdir" in ovl_upper becomes an orphan
> whiteout, which will lead to fsck.overlay check failure.
>
> This patch change to invoke _overlay_check_dirs() to check real
> test dirs instead of pre-defined common dirs.
>
> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
Looks correct
Amir.
> ---
> tests/overlay/010 | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/tests/overlay/010 b/tests/overlay/010
> index f55ebec..d6b7180 100755
> --- a/tests/overlay/010
> +++ b/tests/overlay/010
> @@ -48,17 +48,17 @@ rm -f $seqres.full
> # real QA test starts here
> _supported_fs overlay
> _supported_os Linux
> -_require_scratch
> +_require_scratch_nocheck
>
> # Remove all files from previous tests
> _scratch_mkfs
>
> # Need two lower dirs in this test, and we mount overlay ourselves,
> # create upper and workdir as well
> -lowerdir1=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER.1
> -lowerdir2=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER.2
> -upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER
> -workdir=$OVL_BASE_SCRATCH_MNT/$OVL_WORK
> +lowerdir1=$OVL_BASE_SCRATCH_MNT/lower1
> +lowerdir2=$OVL_BASE_SCRATCH_MNT/lower2
> +upperdir=$OVL_BASE_SCRATCH_MNT/upper
> +workdir=$OVL_BASE_SCRATCH_MNT/work
> mkdir -p $lowerdir1 $lowerdir2 $upperdir $workdir
>
> # One lowerdir contains test dir and test files, the other contains whiteout
> @@ -70,6 +70,7 @@ mknod $lowerdir2/testdir/a c 0 0
> _overlay_scratch_mount_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir
> rm -rf $SCRATCH_MNT/testdir
>
> +_overlay_check_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir
> # success, all done
> echo "Silence is golden"
> status=0
> --
> 2.9.5
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v3 5/7] overlay/003: fix fs check failure
2018-01-12 12:05 ` [PATCH v3 5/7] overlay/003: fix fs check failure zhangyi (F)
@ 2018-01-12 19:12 ` Amir Goldstein
0 siblings, 0 replies; 16+ messages in thread
From: Amir Goldstein @ 2018-01-12 19:12 UTC (permalink / raw)
To: zhangyi (F)
Cc: overlayfs, fstests, Miklos Szeredi, Eryu Guan, Miao Xie,
yangerkun
On Fri, Jan 12, 2018 at 2:05 PM, zhangyi (F) <yi.zhang@huawei.com> wrote:
> _check_overlay_scratch_fs() will check lowerdir of overlay filesystem,
> this case remove this directory after test will lead to check failure,
> and it is not really necessary to remove this directory, so keep this
> directory.
>
> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
Looks correct,
Amir.
> ---
> tests/overlay/003 | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/tests/overlay/003 b/tests/overlay/003
> index f980edb..154531e 100755
> --- a/tests/overlay/003
> +++ b/tests/overlay/003
> @@ -92,7 +92,6 @@ ls ${SCRATCH_MNT}/
> # unmount overlayfs but not base fs
> $UMOUNT_PROG $SCRATCH_MNT
>
> -rm -rf $lowerdir
> echo "Silence is golden"
> # success, all done
> status=0
> --
> 2.9.5
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v3 0/7] overlay: add fsck.overlay basic tests
2018-01-12 12:05 [PATCH v3 0/7] overlay: add fsck.overlay basic tests zhangyi (F)
` (6 preceding siblings ...)
2018-01-12 12:05 ` [PATCH v3 7/7] overlay/019: " zhangyi (F)
@ 2018-01-12 19:19 ` Amir Goldstein
2018-01-15 4:11 ` zhangyi (F)
7 siblings, 1 reply; 16+ messages in thread
From: Amir Goldstein @ 2018-01-12 19:19 UTC (permalink / raw)
To: zhangyi (F)
Cc: overlayfs, fstests, Miklos Szeredi, Eryu Guan, Miao Xie,
yangerkun
On Fri, Jan 12, 2018 at 2:05 PM, zhangyi (F) <yi.zhang@huawei.com> wrote:
> Hi all:
>
> Here is the third version of test cases for the upcoming fsck.overlay,
> corresponding to fsck.overlay v4 (will post to github repository soon).
> Test fsck.overlay check and fix inconsistency of whiteout and redirect/impure
> xattr.
>
> Changes since v2:
> - Modify some minor suggestions from Amir and Vivek, and simplify code
> in all three test cases.
> - Fix duplicate redirect xattr test in 202.
> - Add impure xattr test case of general merge directory in 'no impure'
> parent directory.
> - Fix fs check failure in other overlay fs test cases. PS: The
> multi-lowers problem in overlay/010 also appears in many other tests,
> _require_scratch() will mis-check the pre-defined underlying dirs
> (not the real test dirs). I think they also need to be modified as this
> patch(06/07) does to check the correct dirs, and I can fix them if you
> think necessary.
Yes, please do.
Thinking out loud, we could use a helper _require_overlay_scratch_dirs
for tests that use _overlay_scratch_mount_dirs and not _scratch_mount.
That helper will actually be a wrapper to _require_scratch_nocheck, but
with a comment that explains why, because usually,
_require_scratch_nocheck means that test leaves filesystem corrupt
and that is not the case here.
Thanks,
Amir.
>
> ------
>
> Changes since v1:
>
> - Fix _check_scratch_fs hook.
> - Remove valid/invalid opaque xattr test.
> - Add whiteout test cases of valid/invalid whiteouts in opaque/redirect
> parent directory.
> - Add impure xattr test.
>
> zhangyi (F) (7):
> overlay: add filesystem check helper
> overlay: add fsck.overlay whiteout test
> overlay: add fsck.overlay redirect directory test
> overlay: add fsck.overlay impure xattr test
> overlay/003: fix fs check failure
> overlay/010: fix fs check failure
> overlay/019: fix fs check failure
>
> common/config | 1 +
> common/overlay | 80 +++++++++++++++++
> common/rc | 4 +-
> tests/overlay/003 | 1 -
> tests/overlay/010 | 11 +--
> tests/overlay/019 | 2 +-
> tests/overlay/201 | 232 ++++++++++++++++++++++++++++++++++++++++++++++++
> tests/overlay/201.out | 10 +++
> tests/overlay/202 | 240 ++++++++++++++++++++++++++++++++++++++++++++++++++
> tests/overlay/202.out | 10 +++
> tests/overlay/203 | 143 ++++++++++++++++++++++++++++++
> tests/overlay/203.out | 4 +
> tests/overlay/group | 3 +
> 13 files changed, 732 insertions(+), 9 deletions(-)
> create mode 100755 tests/overlay/201
> create mode 100644 tests/overlay/201.out
> create mode 100755 tests/overlay/202
> create mode 100644 tests/overlay/202.out
> create mode 100755 tests/overlay/203
> create mode 100644 tests/overlay/203.out
>
> --
> 2.5.0
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v3 4/7] overlay: add fsck.overlay impure xattr test
2018-01-12 12:05 ` [PATCH v3 4/7] overlay: add fsck.overlay impure xattr test zhangyi (F)
@ 2018-01-12 20:52 ` Amir Goldstein
0 siblings, 0 replies; 16+ messages in thread
From: Amir Goldstein @ 2018-01-12 20:52 UTC (permalink / raw)
To: zhangyi (F)
Cc: overlayfs, fstests, Miklos Szeredi, Eryu Guan, Miao Xie,
yangerkun
On Fri, Jan 12, 2018 at 2:05 PM, zhangyi (F) <yi.zhang@huawei.com> wrote:
> Add fsck.overlay test case to test it how to deal with impure
> xattr in underlying directories of overlayfs.
>
> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
Looks good
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
> ---
> tests/overlay/203 | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++
> tests/overlay/203.out | 4 ++
> tests/overlay/group | 1 +
> 3 files changed, 148 insertions(+)
> create mode 100755 tests/overlay/203
> create mode 100644 tests/overlay/203.out
>
> diff --git a/tests/overlay/203 b/tests/overlay/203
> new file mode 100755
> index 0000000..82b224b
> --- /dev/null
> +++ b/tests/overlay/203
> @@ -0,0 +1,143 @@
> +#! /bin/bash
> +# FS QA Test 203
> +#
> +# Test fsck.overlay how to deal with impure xattr in overlayfs.
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (c) 2017 Huawei. All Rights Reserved.
> +# Author: zhangyi (F) <yi.zhang@huawei.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"
> +
> +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
> +_require_command "$FSCK_OVERLAY_PROG" fsck.overlay
> +
> +# remove all files from previous tests
> +_scratch_mkfs
> +
> +OVL_REDIRECT_XATTR="trusted.overlay.redirect"
> +OVL_IMPURE_XATTR="trusted.overlay.impure"
> +OVL_IMPURE_XATTR_VAL="y"
> +
> +# Create a redirect directory
> +make_redirect_dir()
> +{
> + local target=$1
> + local value=$2
> +
> + mkdir -p $target
> + $SETFATTR_PROG -n $OVL_REDIRECT_XATTR -v $value $target
> +}
> +
> +# Remove impure xattr
> +remove_impure()
> +{
> + local target=$1
> +
> + $SETFATTR_PROG -x $OVL_IMPURE_XATTR $target
> +}
> +
> +# Check impure xattr
> +check_impure()
> +{
> + local target=$1
> +
> + value=$($GETFATTR_PROG --absolute-names --only-values -n \
> + $OVL_IMPURE_XATTR $target)
> +
> + [[ $value == $OVL_IMPURE_XATTR_VAL ]] || echo "Missing impure xattr"
> +}
> +
> +# Create test directories
> +lowerdir=$OVL_BASE_SCRATCH_MNT/lower
> +lowerdir2=$OVL_BASE_SCRATCH_MNT/lower2
> +upperdir=$OVL_BASE_SCRATCH_MNT/upper
> +workdir=$OVL_BASE_SCRATCH_MNT/workdir
> +
> +make_test_dirs()
> +{
> + rm -rf $lowerdir $lowerdir2 $upperdir $workdir
> + mkdir -p $lowerdir $lowerdir2 $upperdir $workdir
> +}
> +
> +# Test missing impure xattr in directory which has origin targets, should fix
> +echo "+ Missing impure"
> +make_test_dirs
> +mkdir $lowerdir/{testdir1,testdir2}
> +mkdir $upperdir/{testdir1,testdir2}
> +touch $lowerdir/testdir1/foo
> +mkdir $lowerdir/testdir2/subdir
> +_overlay_scratch_mount_dirs $lowerdir $upperdir $workdir
> +touch $SCRATCH_MNT/testdir1/foo
> +touch $SCRATCH_MNT/testdir2/subdir
> +$UMOUNT_PROG $SCRATCH_MNT
> +remove_impure $upperdir/testdir1
> +remove_impure $upperdir/testdir2
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_impure $upperdir/testdir1
> +check_impure $upperdir/testdir2
> +
> +# Test missing impure xattr in directory which has redirect directories,
> +# should fix
> +echo "+ Missing impure(2)"
> +make_test_dirs
> +mkdir $lowerdir/origin
> +make_redirect_dir $upperdir/testdir/subdir "/origin"
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_impure $upperdir/testdir
> +
> +# Test missing impure xattr in directory which has merge directories,
> +# should fix
> +echo "+ Missing impure(3)"
> +make_test_dirs
> +mkdir $lowerdir/testdir $upperdir/testdir
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_impure $upperdir
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/overlay/203.out b/tests/overlay/203.out
> new file mode 100644
> index 0000000..dd81788
> --- /dev/null
> +++ b/tests/overlay/203.out
> @@ -0,0 +1,4 @@
> +QA output created by 203
> ++ Missing impure
> ++ Missing impure(2)
> ++ Missing impure(3)
> diff --git a/tests/overlay/group b/tests/overlay/group
> index e39b5e0..f99d89e 100644
> --- a/tests/overlay/group
> +++ b/tests/overlay/group
> @@ -51,3 +51,4 @@
> 048 auto quick copyup hardlink
> 201 auto quick fsck
> 202 auto quick fsck
> +203 auto quick fsck
> --
> 2.9.5
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v3 2/7] overlay: add fsck.overlay whiteout test
2018-01-12 12:05 ` [PATCH v3 2/7] overlay: add fsck.overlay whiteout test zhangyi (F)
@ 2018-01-12 20:58 ` Amir Goldstein
0 siblings, 0 replies; 16+ messages in thread
From: Amir Goldstein @ 2018-01-12 20:58 UTC (permalink / raw)
To: zhangyi (F)
Cc: overlayfs, fstests, Miklos Szeredi, Eryu Guan, Miao Xie,
yangerkun
On Fri, Jan 12, 2018 at 2:05 PM, zhangyi (F) <yi.zhang@huawei.com> wrote:
> Add fsck.overlay test case to test it how to deal with orphan/valid
> whiteouts in underlying directories of overlayfs.
>
> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
Looks good.
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
> ---
> tests/overlay/201 | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++
> tests/overlay/201.out | 10 +++
> tests/overlay/group | 1 +
> 3 files changed, 243 insertions(+)
> create mode 100755 tests/overlay/201
> create mode 100644 tests/overlay/201.out
>
> diff --git a/tests/overlay/201 b/tests/overlay/201
> new file mode 100755
> index 0000000..fbb9898
> --- /dev/null
> +++ b/tests/overlay/201
> @@ -0,0 +1,232 @@
> +#! /bin/bash
> +# FS QA Test 201
> +#
> +# Test fsck.overlay how to deal with whiteouts in overlayfs.
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (c) 2017 Huawei. All Rights Reserved.
> +# Author: zhangyi (F) <yi.zhang@huawei.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"
> +
> +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
> +_require_command "$FSCK_OVERLAY_PROG" fsck.overlay
> +
> +# remove all files from previous tests
> +_scratch_mkfs
> +
> +OVL_REDIRECT_XATTR="trusted.overlay.redirect"
> +OVL_OPAQUE_XATTR="trusted.overlay.opaque"
> +OVL_OPAQUE_XATTR_VAL="y"
> +
> +# Check whiteout
> +check_whiteout()
> +{
> + for arg in $*
> + do
> + local ttype=`stat -c "%F:%t,%T" $arg`
> +
> + [[ $ttype == "character special file:0,0" ]] || \
> + echo "Valid whiteout removed incorrectly"
> + done
> +}
> +
> +# Create a whiteout
> +make_whiteout()
> +{
> + for arg in $*
> + do
> + mknod $arg c 0 0
> + done
> +}
> +
> +# Create an opaque directory
> +make_opaque_dir()
> +{
> + local target=$1
> +
> + mkdir -p $target
> + $SETFATTR_PROG -n $OVL_OPAQUE_XATTR -v $OVL_OPAQUE_XATTR_VAL $target
> +}
> +
> +# Create a redirect directory
> +make_redirect_dir()
> +{
> + local target=$1
> + local value=$2
> +
> + mkdir -p $target
> + $SETFATTR_PROG -n $OVL_REDIRECT_XATTR -v $value $target
> +}
> +
> +# Create test directories
> +lowerdir=$OVL_BASE_SCRATCH_MNT/lower
> +lowerdir2=$OVL_BASE_SCRATCH_MNT/lower2
> +upperdir=$OVL_BASE_SCRATCH_MNT/upper
> +workdir=$OVL_BASE_SCRATCH_MNT/workdir
> +
> +make_test_dirs()
> +{
> + rm -rf $lowerdir $lowerdir2 $upperdir $workdir
> + mkdir -p $lowerdir $lowerdir2 $upperdir $workdir
> +}
> +
> +# Test orphan whiteout in lower and upper layer, should remove
> +echo "+ Orphan whiteout"
> +make_test_dirs
> +make_whiteout $lowerdir/foo $upperdir/{foo,bar}
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +ls $lowerdir
> +ls $upperdir
> +
> +# Test valid whiteout covering lower target, should not remove
> +echo "+ Valid whiteout"
> +make_test_dirs
> +touch $lowerdir2/{foo,bar}
> +make_whiteout $upperdir/foo $lowerdir/bar
> +
> +_overlay_fsck_dirs "$lowerdir:$lowerdir2" $upperdir $workdir -p >> \
> + $seqres.full 2>&1 || _fail "fsck should not fail"
> +check_whiteout $upperdir/foo $lowerdir/bar
> +
> +# Test orphan whiteout in opaque directory, should remove
> +echo "+ Orphan whiteout(2)"
> +make_test_dirs
> +mkdir $lowerdir/testdir
> +touch $lowerdir/testdir/foo
> +make_opaque_dir $upperdir/testdir
> +make_whiteout $upperdir/testdir/foo
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +ls $upperdir/testdir
> +
> +# Test orphan whiteout whose parent path is not an merged directory,
> +# should remove
> +echo "+ Orphan whiteout(3)"
> +make_test_dirs
> +mkdir $lowerdir2/{testdir1,testdir2,testdir3}
> +touch $lowerdir2/{testdir1/foo,testdir2/foo,testdir3/foo}
> +mkdir $upperdir/{testdir1,testdir2,testdir3,testdir4}
> +touch $lowerdir/testdir1
> +make_whiteout $lowerdir/testdir2
> +make_opaque_dir $lowerdir/testdir3
> +make_whiteout $upperdir/{testdir1/foo,/testdir2/foo,testdir3/foo,testdir4/foo}
> +
> +_overlay_fsck_dirs "$lowerdir:$lowerdir2" $upperdir $workdir -p >> \
> + $seqres.full 2>&1 || _fail "fsck should not fail"
> +ls $upperdir/testdir1
> +ls $upperdir/testdir2
> +ls $upperdir/testdir3
> +ls $upperdir/testdir4
> +
> +# Test orphan whiteout in redirect directory, should remove
> +echo "+ Orphan whiteout(4)"
> +make_test_dirs
> +mkdir $lowerdir/{testdir,origin}
> +touch $lowerdir/testdir/foo
> +make_redirect_dir $upperdir/testdir "origin"
> +make_whiteout $upperdir/testdir/foo
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +ls $upperdir/testdir
> +
> +# Test valid whiteout in redirect directory cover file in lower
> +# redirect origin directory, should not remove
> +echo "+ Valid whiteout(2)"
> +make_test_dirs
> +mkdir $lowerdir/origin
> +touch $lowerdir/origin/foo
> +make_redirect_dir $upperdir/testdir "origin"
> +make_whiteout $upperdir/testdir/foo
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_whiteout $upperdir/testdir/foo
> +
> +# Test valid whiteout covering lower target whose parent directory
> +# merge with a redirect directory in the middle layer, should not remove.
> +echo "+ Valid whiteout(3)"
> +make_test_dirs
> +mkdir -p $lowerdir2/origin/subdir
> +touch $lowerdir2/origin/subdir/foo
> +make_redirect_dir $lowerdir/testdir "origin"
> +mkdir -p $upperdir/testdir/subdir
> +make_whiteout $upperdir/testdir/subdir/foo
> +
> +_overlay_fsck_dirs "$lowerdir:$lowerdir2" $upperdir $workdir -p \
> + >> $seqres.full 2>&1 || _fail "fsck should not fail"
> +check_whiteout $upperdir/testdir/subdir/foo
> +
> +# Test invalid whiteout in opaque subdirectory in a redirect directory,
> +# should remove
> +echo "+ Orphan whiteout(5)"
> +make_test_dirs
> +mkdir -p $lowerdir/origin/subdir
> +touch $lowerdir/origin/subdir/foo
> +make_redirect_dir $upperdir/testdir "origin"
> +make_opaque_dir $upperdir/testdir/subdir
> +make_whiteout $upperdir/testdir/subdir/foo
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +ls $upperdir/testdir/subdir
> +
> +# Test valid whiteout in reidrect subdirectory in a opaque directory
> +# covering lower target, should not remove
> +echo "+ Valid whiteout(4)"
> +make_test_dirs
> +mkdir $lowerdir/origin
> +touch $lowerdir/origin/foo
> +make_opaque_dir $upperdir/testdir
> +make_redirect_dir $upperdir/testdir/subdir "/origin"
> +make_whiteout $upperdir/testdir/subdir/foo
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_whiteout $upperdir/testdir/subdir/foo
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/overlay/201.out b/tests/overlay/201.out
> new file mode 100644
> index 0000000..157bb85
> --- /dev/null
> +++ b/tests/overlay/201.out
> @@ -0,0 +1,10 @@
> +QA output created by 201
> ++ Orphan whiteout
> ++ Valid whiteout
> ++ Orphan whiteout(2)
> ++ Orphan whiteout(3)
> ++ Orphan whiteout(4)
> ++ Valid whiteout(2)
> ++ Valid whiteout(3)
> ++ Orphan whiteout(5)
> ++ Valid whiteout(4)
> diff --git a/tests/overlay/group b/tests/overlay/group
> index 7e541e4..7c5fcbb 100644
> --- a/tests/overlay/group
> +++ b/tests/overlay/group
> @@ -49,3 +49,4 @@
> 044 auto quick copyup hardlink nonsamefs
> 047 auto quick copyup hardlink
> 048 auto quick copyup hardlink
> +201 auto quick fsck
> --
> 2.9.5
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v3 3/7] overlay: add fsck.overlay redirect directory test
2018-01-12 12:05 ` [PATCH v3 3/7] overlay: add fsck.overlay redirect directory test zhangyi (F)
@ 2018-01-12 21:32 ` Amir Goldstein
0 siblings, 0 replies; 16+ messages in thread
From: Amir Goldstein @ 2018-01-12 21:32 UTC (permalink / raw)
To: zhangyi (F)
Cc: overlayfs, fstests, Miklos Szeredi, Eryu Guan, Miao Xie,
yangerkun
On Fri, Jan 12, 2018 at 2:05 PM, zhangyi (F) <yi.zhang@huawei.com> wrote:
> Add fsck.overlay test case to test it how to deal with invalid/valid/
> duplicate redirect xattr in underlying directories of overlayfs.
>
> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
Looks good, with some minor comments
> ---
> tests/overlay/202 | 240 ++++++++++++++++++++++++++++++++++++++++++++++++++
> tests/overlay/202.out | 10 +++
> tests/overlay/group | 1 +
> 3 files changed, 251 insertions(+)
> create mode 100755 tests/overlay/202
> create mode 100644 tests/overlay/202.out
>
> diff --git a/tests/overlay/202 b/tests/overlay/202
> new file mode 100755
> index 0000000..84a7bad
> --- /dev/null
> +++ b/tests/overlay/202
> @@ -0,0 +1,240 @@
> +#! /bin/bash
> +# FS QA Test 202
> +#
> +# Test fsck.overlay how to deal with redirect xattr in overlayfs.
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (c) 2017 Huawei. All Rights Reserved.
> +# Author: zhangyi (F) <yi.zhang@huawei.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"
> +
> +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
> +. ./common/attr
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +# real QA test starts here
> +_supported_fs overlay
> +_supported_os Linux
> +_require_scratch
> +_require_attrs
> +_require_command "$FSCK_OVERLAY_PROG" fsck.overlay
> +
> +# remove all files from previous tests
> +_scratch_mkfs
> +
> +OVL_REDIRECT_XATTR="trusted.overlay.redirect"
> +OVL_OPAQUE_XATTR="trusted.overlay.opaque"
> +OVL_OPAQUE_XATTR_VAL="y"
> +
> +# Create a redirect directory
> +make_redirect_dir()
> +{
> + local target=$1
> + local value=$2
> +
> + mkdir -p $target
> + $SETFATTR_PROG -n $OVL_REDIRECT_XATTR -v $value $target
> +}
> +
> +# Check redirect xattr
> +check_redirect()
> +{
> + local target=$1
> + local expect=$2
> +
> + value=$($GETFATTR_PROG --absolute-names --only-values -n \
> + $OVL_REDIRECT_XATTR $target)
> +
> + [[ $value == $expect ]] || echo "Redirect xattr incorrect"
> +}
> +
> +check_no_redirect()
> +{
> + local target=$1
> +
> + value=$($GETFATTR_PROG --absolute-names -d -m \
> + $OVL_REDIRECT_XATTR $target)
> +
> + [[ -z "$value" ]] || echo "Redirect xattr not empty"
> +}
> +
> +# Check opaque xattr
> +check_opaque()
> +{
> + local target=$1
> +
> + value=$($GETFATTR_PROG --absolute-names --only-values -n \
> + $OVL_OPAQUE_XATTR $target)
> +
> + [[ $value == $OVL_OPAQUE_XATTR_VAL ]] || echo "Opaque xattr incorrect"
> +}
> +
> +# Check whiteout
> +check_whiteout()
> +{
> + local target=$1
> +
> + target_type=`stat -c "%F:%t,%T" $target`
> +
> + [[ $target_type == "character special file:0,0" ]] || \
> + echo "Whiteout missing"
> +}
> +
> +# Create test directories
> +lowerdir=$OVL_BASE_SCRATCH_MNT/lower
> +lowerdir2=$OVL_BASE_SCRATCH_MNT/lower2
> +upperdir=$OVL_BASE_SCRATCH_MNT/upper
> +workdir=$OVL_BASE_SCRATCH_MNT/workdir
> +
> +make_test_dirs()
> +{
> + rm -rf $lowerdir $lowerdir2 $upperdir $workdir
> + mkdir -p $lowerdir $lowerdir2 $upperdir $workdir
> +}
> +
> +# Test invalid redirect xattr point to a nonexistent origin, should remove
> +echo "+ Invalid redirect"
> +make_test_dirs
> +make_redirect_dir $upperdir/testdir "invalid"
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_no_redirect $upperdir/testdir
> +
> +# Test invalid redirect xattr point to a file origin, should remove
> +echo "+ Invalid redirect(2)"
> +make_test_dirs
> +touch $lowerdir/origin
> +make_redirect_dir $upperdir/testdir "origin"
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_no_redirect $upperdir/testdir
> +
> +# Test valid redirect xattr point to a directory origin in the same directory,
> +# should not remove
> +echo "+ Valid redirect"
> +make_test_dirs
> +mkdir $lowerdir/origin
> +mknod $upperdir/origin c 0 0
I got spoiled from previous tests ;-) please use make_whiteout helper
here as well.
> +make_redirect_dir $upperdir/testdir "origin"
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_redirect $upperdir/testdir "origin"
> +
> +# Test valid redirect xattr point to a directory origin in different directories
> +# should not remove
> +echo "+ Valid redirect(2)"
> +make_test_dirs
> +mkdir $lowerdir/origin
> +mknod $upperdir/origin c 0 0
> +make_redirect_dir $upperdir/testdir1/testdir2 "/origin"
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_redirect $upperdir/testdir1/testdir2 "/origin"
> +
> +# Test valid redirect xattr but missing whiteout to cover lower target,
> +# should fix whiteout
> +echo "+ Missing whiteout"
> +make_test_dirs
> +mkdir $lowerdir/origin
> +make_redirect_dir $upperdir/testdir "origin"
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_redirect $upperdir/testdir "origin"
> +check_whiteout $upperdir/origin
> +
> +# Test valid redirect xattrs exchanged by rename, should not remove
> +echo "+ Valid redirect(3)"
> +make_test_dirs
> +mkdir $lowerdir/{testdir1,testdir2}
> +make_redirect_dir $upperdir/testdir1 "testdir2"
> +make_redirect_dir $upperdir/testdir2 "testdir1"
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_redirect $upperdir/testdir1 "testdir2"
> +check_redirect $upperdir/testdir2 "testdir1"
> +
> +# Test invalid redirect xattr with lower same name directory exists,
> +# should remove invalid redirect xattr and set opaque in yes mode
> +echo "+ Invalid redirect(3)"
> +make_test_dirs
> +mkdir $lowerdir/testdir
> +make_redirect_dir $upperdir/testdir "invalid"
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -y >> $seqres.full 2>&1 || \
When using -y, better add a comment with the expected questions
for whom Yes is the answer (even though one might deduce that from the
expected results)
> + _fail "fsck should not fail"
> +check_no_redirect $upperdir/testdir
> +check_opaque $upperdir/testdir
> +
> +# Test duplicate redirect xattrs point to one origin, should fail in
> +# auto mode, and should remove the duplicate one in yes mode
Better say "either of the duplicates" for clarity
> +echo "+ Duplicate redirect"
> +make_test_dirs
> +mkdir $lowerdir2/origin
> +make_redirect_dir $lowerdir/testdir1 "origin"
> +make_redirect_dir $lowerdir/testdir2 "origin"
> +make_redirect_dir $upperdir/testdir3 "origin"
> +
> +_overlay_fsck_dirs "$lowerdir:$lowerdir2" $upperdir $workdir -p >> \
> + $seqres.full 2>&1 && _fail "fsck should fail"
> +_overlay_fsck_dirs "$lowerdir:$lowerdir2" $upperdir $workdir -y >> \
> + $seqres.full 2>&1 || _fail "fsck should not fail"
> +redirect_1=`check_redirect $lowerdir/testdir1 "origin" 2>/dev/null`
> +redirect_2=`check_redirect $lowerdir/testdir2 "origin" 2>/dev/null`
> +[[ $redirect_1 == $redirect_2 ]] && echo "Redirect xattr incorrect"
> +check_no_redirect $upperdir/testdir3
> +
> +# Test duplicate redirect xattr duplicate with merge directory, should
> +# fail in auto mode, and should remove the redirect directory in yes mode
> +echo "+ Duplicate redirect(2)"
> +make_test_dirs
> +mkdir $lowerdir/origin $upperdir/origin
> +make_redirect_dir $upperdir/testdir "origin"
> +
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -p >> $seqres.full 2>&1 && \
> + _fail "fsck should fail"
> +_overlay_fsck_dirs $lowerdir $upperdir $workdir -y >> $seqres.full 2>&1 || \
> + _fail "fsck should not fail"
> +check_no_redirect $upperdir/testdir
Maybe also worth to have $lowerdir/testdir and check_opaque $upperdir/testdir
in this case? or add another case?
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/overlay/202.out b/tests/overlay/202.out
> new file mode 100644
> index 0000000..8473336
> --- /dev/null
> +++ b/tests/overlay/202.out
> @@ -0,0 +1,10 @@
> +QA output created by 202
> ++ Invalid redirect
> ++ Invalid redirect(2)
> ++ Valid redirect
> ++ Valid redirect(2)
> ++ Missing whiteout
> ++ Valid redirect(3)
> ++ Invalid redirect(3)
> ++ Duplicate redirect
> ++ Duplicate redirect(2)
> diff --git a/tests/overlay/group b/tests/overlay/group
> index 7c5fcbb..e39b5e0 100644
> --- a/tests/overlay/group
> +++ b/tests/overlay/group
> @@ -50,3 +50,4 @@
> 047 auto quick copyup hardlink
> 048 auto quick copyup hardlink
> 201 auto quick fsck
> +202 auto quick fsck
> --
> 2.9.5
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v3 0/7] overlay: add fsck.overlay basic tests
2018-01-12 19:19 ` [PATCH v3 0/7] overlay: add fsck.overlay basic tests Amir Goldstein
@ 2018-01-15 4:11 ` zhangyi (F)
0 siblings, 0 replies; 16+ messages in thread
From: zhangyi (F) @ 2018-01-15 4:11 UTC (permalink / raw)
To: Amir Goldstein
Cc: overlayfs, fstests, Miklos Szeredi, Eryu Guan, Miao Xie,
yangerkun
On 2018/1/13 3:19, Amir Goldstein Wrote:
> On Fri, Jan 12, 2018 at 2:05 PM, zhangyi (F) <yi.zhang@huawei.com> wrote:
>> Hi all:
>>
>> Here is the third version of test cases for the upcoming fsck.overlay,
>> corresponding to fsck.overlay v4 (will post to github repository soon).
>> Test fsck.overlay check and fix inconsistency of whiteout and redirect/impure
>> xattr.
>>
>> Changes since v2:
>> - Modify some minor suggestions from Amir and Vivek, and simplify code
>> in all three test cases.
>> - Fix duplicate redirect xattr test in 202.
>> - Add impure xattr test case of general merge directory in 'no impure'
>> parent directory.
>> - Fix fs check failure in other overlay fs test cases. PS: The
>> multi-lowers problem in overlay/010 also appears in many other tests,
>> _require_scratch() will mis-check the pre-defined underlying dirs
>> (not the real test dirs). I think they also need to be modified as this
>> patch(06/07) does to check the correct dirs, and I can fix them if you
>> think necessary.
>
> Yes, please do.
> Thinking out loud, we could use a helper _require_overlay_scratch_dirs
> for tests that use _overlay_scratch_mount_dirs and not _scratch_mount.
> That helper will actually be a wrapper to _require_scratch_nocheck, but
> with a comment that explains why, because usually,
> _require_scratch_nocheck means that test leaves filesystem corrupt
> and that is not the case here.
>
This makes sense, will do.
Thanks,
Yi.
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2018-01-15 4:13 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-12 12:05 [PATCH v3 0/7] overlay: add fsck.overlay basic tests zhangyi (F)
2018-01-12 12:05 ` [PATCH v3 1/7] overlay: add filesystem check helper zhangyi (F)
2018-01-12 12:05 ` [PATCH v3 2/7] overlay: add fsck.overlay whiteout test zhangyi (F)
2018-01-12 20:58 ` Amir Goldstein
2018-01-12 12:05 ` [PATCH v3 3/7] overlay: add fsck.overlay redirect directory test zhangyi (F)
2018-01-12 21:32 ` Amir Goldstein
2018-01-12 12:05 ` [PATCH v3 4/7] overlay: add fsck.overlay impure xattr test zhangyi (F)
2018-01-12 20:52 ` Amir Goldstein
2018-01-12 12:05 ` [PATCH v3 5/7] overlay/003: fix fs check failure zhangyi (F)
2018-01-12 19:12 ` Amir Goldstein
2018-01-12 12:05 ` [PATCH v3 6/7] overlay/010: " zhangyi (F)
2018-01-12 19:10 ` Amir Goldstein
2018-01-12 12:05 ` [PATCH v3 7/7] overlay/019: " zhangyi (F)
2018-01-12 19:10 ` Amir Goldstein
2018-01-12 19:19 ` [PATCH v3 0/7] overlay: add fsck.overlay basic tests Amir Goldstein
2018-01-15 4:11 ` zhangyi (F)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox