* [xfstests PATCH v5 0/5] overlay: add overlay filesystem dirs check @ 2018-03-01 12:13 zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 1/5] common/rc: improve dev mounted check helper zhangyi (F) ` (4 more replies) 0 siblings, 5 replies; 14+ messages in thread From: zhangyi (F) @ 2018-03-01 12:13 UTC (permalink / raw) To: eguan, fstests Cc: linux-unionfs, miklos, amir73il, yi.zhang, miaoxie, yangerkun Hi Eryu and Amir: I have handle comments from last iteration in patch {2,5}/5, please review. Thanks, Yi. Changes since v4: - Clarify comments in patch 2/5, and move _overlay_check_scratch_dirs helper to patch 5/5. - Modify input arguments of _overlay_fsck_dirs in _overlay_check_dirs. - Modify OVL_FSCK_OPTIONS example in README.overlay. Changes since v3: - Move overlay checker after _unmount in overlay/{038,041}, and embed checker into unmount_dirs() in overlay/{051,053,055}. - split out patch "overlay: correct test mount options" Changes since v2: - Rename _is_mounted to _is_dev_mounted and use findmnt instead of mount. - Fix mistakes in patch 2/6 and introduce _is_dir_mountpoint helper, also introduce fsck options use for overlayfs. - Add overlay/049 into patch 4/6 to skip fs check. - Add nfs export cases into patch 5/6 to do correct dirs check. - Add the "missing feature" of test mount options. Changes since v1: - Details comments in patch 1/5. - Improve _overlay_check_scratch_dirs to accept extra options. - Fix basic filesystem mounted check in _overlay_check_fs. - Improve overlay/044 in patch 5/5 to add index=on option. ---------- Background: This patchset implement filesystem check for overlay filesystem, base on my "overlay: add fsck.overlay basic tests" patchset and works only if fsck.overlay[1] exists (otherwise not run). [1] https://github.com/hisilicon/overlayfs-progs zhangyi (F) (5): common/rc: improve dev mounted check helper overlay: hook filesystem check helper overlay/003: fix fs check failure overlay: skip check for tests finished with corrupt filesystem overlay: correct scratch dirs check README.overlay | 10 ++++- common/config | 4 ++ common/overlay | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ common/rc | 47 +++++++++++--------- common/xfs | 2 +- tests/overlay/003 | 1 - tests/overlay/005 | 7 ++- tests/overlay/010 | 7 ++- tests/overlay/014 | 10 ++++- tests/overlay/019 | 2 +- tests/overlay/031 | 2 +- tests/overlay/035 | 7 ++- tests/overlay/036 | 6 ++- tests/overlay/037 | 7 ++- tests/overlay/038 | 10 ++++- tests/overlay/041 | 10 ++++- tests/overlay/043 | 7 ++- tests/overlay/044 | 8 +++- tests/overlay/049 | 2 +- tests/overlay/051 | 10 ++++- tests/overlay/053 | 10 ++++- tests/overlay/055 | 10 ++++- 22 files changed, 263 insertions(+), 44 deletions(-) -- 2.5.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [xfstests PATCH v5 1/5] common/rc: improve dev mounted check helper 2018-03-01 12:13 [xfstests PATCH v5 0/5] overlay: add overlay filesystem dirs check zhangyi (F) @ 2018-03-01 12:13 ` zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 2/5] overlay: hook filesystem " zhangyi (F) ` (3 subsequent siblings) 4 siblings, 0 replies; 14+ messages in thread From: zhangyi (F) @ 2018-03-01 12:13 UTC (permalink / raw) To: eguan, fstests Cc: linux-unionfs, miklos, amir73il, yi.zhang, miaoxie, yangerkun There is a problem of missing fstype check in _is_mounted() helper, it will return the mountpoint if only the device arguments matches. For example: Base mounted filesystem: /dev/sda2 on /boot type ext4 (rw,relatime,data=ordered) FSTYPE=xfs mountpoint=`_is_mounted /dev/sda1` echo "$mountpoint" Output: /boot This patch rename _is_mounted to _is_dev_mounted because it check the given device only (not mount dir), and add an optional "fstype" parameter, let user specify file system type instead of default FSTYPE. Finally, use findmnt instead of mount to avoid complex processing of mount info and fix this problem simply. Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> --- common/rc | 29 ++++++++++------------------- common/xfs | 2 +- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/common/rc b/common/rc index a68e6cc..1dae3bf 100644 --- a/common/rc +++ b/common/rc @@ -2381,27 +2381,18 @@ _scratch_mkfs_richacl() esac } -# check that a FS on a device is mounted -# if so, return mount point -# -_is_mounted() +# check if the given device is mounted, if so, return mount point +_is_dev_mounted() { - if [ $# -ne 1 ] - then - echo "Usage: _is_mounted device" 1>&2 - exit 1 - fi + local dev=$1 + local fstype=${2:-$FSTYP} - device=$1 + if [ $# -lt 1 ]; then + echo "Usage: _is_dev_mounted <device> [fstype]" 1>&2 + exit 1 + fi - if _mount | grep "$device " | $AWK_PROG -v pattern="type $FSTYP" ' - pattern { print $3 ; exit 0 } - END { exit 1 } - ' - then - echo "_is_mounted: $device is not a mounted $FSTYP FS" - exit 1 - fi + findmnt -rncv -S $dev -t $fstype -o TARGET | head -1 } # remount a FS to a new mode (ro or rw) @@ -2441,7 +2432,7 @@ _umount_or_remount_ro() fi device=$1 - mountpoint=`_is_mounted $device` + mountpoint=`_is_dev_mounted $device` if [ $USE_REMOUNT -eq 0 ]; then $UMOUNT_PROG $device diff --git a/common/xfs b/common/xfs index 354f584..37cd80c 100644 --- a/common/xfs +++ b/common/xfs @@ -356,7 +356,7 @@ _check_xfs_filesystem() ok=1 # Run online scrub if we can. - mntpt="$(_is_mounted $device)" + mntpt="$(_is_dev_mounted $device)" if [ -n "$mntpt" ] && _supports_xfs_scrub "$mntpt" "$device"; then "$XFS_SCRUB_PROG" $scrubflag -v -d -n $device > $tmp.scrub 2>&1 if [ $? -ne 0 ]; then -- 2.5.0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [xfstests PATCH v5 2/5] overlay: hook filesystem check helper 2018-03-01 12:13 [xfstests PATCH v5 0/5] overlay: add overlay filesystem dirs check zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 1/5] common/rc: improve dev mounted check helper zhangyi (F) @ 2018-03-01 12:13 ` zhangyi (F) 2018-03-01 13:03 ` Amir Goldstein 2018-03-01 12:13 ` [xfstests PATCH v5 3/5] overlay/003: fix fs check failure zhangyi (F) ` (2 subsequent siblings) 4 siblings, 1 reply; 14+ messages in thread From: zhangyi (F) @ 2018-03-01 12:13 UTC (permalink / raw) To: eguan, fstests Cc: linux-unionfs, miklos, amir73il, yi.zhang, miaoxie, yangerkun Hook filesystem check helper to _check_test_fs and _check_scratch_fs for checking consistency of underlying dirs of overlay filesystem. These helpers works only if fsck.overlay exists. This patch introduce OVERLAY_FSCK_OPTIONS use for check overlayfs like OVERLAY_MOUNT_OPTIONS, and also introduce a mount point check helper in common/rc to detect a dir is a mount point or not. [ _check_test_fs/_check_scratch_fs part picked from Amir's patch, thanks ] Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> --- README.overlay | 10 ++++-- common/config | 4 +++ common/overlay | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ common/rc | 18 +++++++++-- 4 files changed, 127 insertions(+), 4 deletions(-) diff --git a/README.overlay b/README.overlay index dfb8234..3cbefab 100644 --- a/README.overlay +++ b/README.overlay @@ -22,6 +22,10 @@ the base fs should be pre-formatted before starting the -overlay run. An easy way to accomplish this is by running './check <some test>' once, before running './check -overlay'. +'./check -overlay' support check overlay test and scratch dirs, +OVERLAY_FSCK_OPTIONS should be set instead of FSCK_OPTIONS if fsck +options need to given directly. + Because of the lack of mkfs support, multi-section config files are only partly supported with './check -overlay'. Only multi-section files that do not change FSTYP and MKFS_OPTIONS can be safely used with -overlay. @@ -40,7 +44,9 @@ run overlay tests on the same base fs, but with different mount options: MOUNT_OPTIONS="-o pquota" TEST_FS_MOUNT_OPTS="-o noatime" OVERLAY_MOUNT_OPTIONS="-o redirect_dir=off" + OVERLAY_FSCK_OPTIONS="-n redirect_dir=off" In the example above, MOUNT_OPTIONS will be used to mount the base scratch fs, -TEST_FS_MOUNT_OPTS will be used to mount the base test fs and -OVERLAY_MOUNT_OPTIONS will be used to mount both test and scratch overlays. +TEST_FS_MOUNT_OPTS will be used to mount the base test fs, +OVERLAY_MOUNT_OPTIONS will be used to mount both test and scratch overlay and +OVERLAY_FSCK_OPTIONS will be used to check both test and scratch overlay. diff --git a/common/config b/common/config index 71115bd..20f0e5f 100644 --- a/common/config +++ b/common/config @@ -566,6 +566,10 @@ _overlay_config_override() # Set SCRATCH vars to overlay base and mount dirs inside base fs export SCRATCH_DEV="$OVL_BASE_SCRATCH_MNT" export SCRATCH_MNT="$OVL_BASE_SCRATCH_MNT/$OVL_MNT" + + # Set fsck options, use default if user not set directly. + export FSCK_OPTIONS="$OVERLAY_FSCK_OPTIONS" + [ -z "$FSCK_OPTIONS" ] && _fsck_opts } _overlay_config_restore() diff --git a/common/overlay b/common/overlay index e1b07f4..5d01e5e 100644 --- a/common/overlay +++ b/common/overlay @@ -190,3 +190,102 @@ _overlay_fsck_dirs() $FSCK_OVERLAY_PROG -o lowerdir=$lowerdir -o upperdir=$upperdir \ -o workdir=$workdir $* } + +_overlay_check_dirs() +{ + local lowerdir=$1 + local upperdir=$2 + local workdir=$3 + shift 3 + local err=0 + + _overlay_fsck_dirs $lowerdir $upperdir $workdir \ + $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 + + return $err +} + +_overlay_check_fs() +{ + # The first arguments is overlay mount point use for checking + # overlay filesystem is mounted or not, the remaining arquments + # use for mounting overlay base filesystem if it was not mounted. + # We shift one to aligns arguments for _overlay_base_mount. + local ovl_mnt=$1 + shift 1 + + local base_dev=$3 + local base_mnt=$4 + + [ "$FSTYP" = overlay ] || return 0 + + # Base fs needs to be mounted to check overlay dirs + local base_fstype="" + local ovl_mounted="" + + [ -z "$base_dev" ] || \ + base_fstype=`_fs_type $base_dev` + + # If base_dev is set but base_fstype is empty, base fs is not + # mounted, we need to mount base fs. Otherwise, we need to + # check and umount overlayfs if it was mounted. + if [ -n "$base_dev" -a -z "$base_fstype" ]; then + _overlay_base_mount $* + else + # Check and umount overlay for dir check + ovl_mounted=`_is_dir_mountpoint $ovl_mnt` + [ -z "$ovl_mounted" ] || $UMOUNT_PROG $ovl_mnt + fi + + _overlay_check_dirs $base_mnt/$OVL_LOWER $base_mnt/$OVL_UPPER \ + $base_mnt/$OVL_WORK + local ret=$? + + if [ -n "$base_dev" -a -z "$base_fstype" ]; then + _overlay_base_unmount "$base_dev" "$base_mnt" + elif [ $ret -eq 0 -a -n "$ovl_mounted" ]; then + # overlay was mounted, remount besides extra mount options + _overlay_mount $base_mnt $ovl_mnt + ret=$? + fi + + if [ $ret != 0 ]; then + status=1 + if [ "$iam" != "check" ]; then + exit 1 + fi + return 1 + fi + + return 0 +} + +_check_overlay_test_fs() +{ + _overlay_check_fs "$TEST_DIR" \ + 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 "$SCRATCH_MNT" \ + 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 1dae3bf..9317674 100644 --- a/common/rc +++ b/common/rc @@ -2395,6 +2395,20 @@ _is_dev_mounted() findmnt -rncv -S $dev -t $fstype -o TARGET | head -1 } +# check if the given dir is a mount point, if so, return mount point +_is_dir_mountpoint() +{ + local dir=$1 + local fstype=${2:-$FSTYP} + + if [ $# -lt 1 ]; then + echo "Uasge: _is_dir_mountpoint <dir> [fstype]" 1>&2 + exit 1 + fi + + findmnt -rncv -t $fstype -o TARGET $dir | head -1 +} + # remount a FS to a new mode (ro or rw) # _remount() @@ -2590,7 +2604,7 @@ _check_test_fs() # no way to check consistency for GlusterFS ;; overlay) - # no way to check consistency for overlay + _check_overlay_test_fs ;; pvfs2) ;; @@ -2648,7 +2662,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.5.0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [xfstests PATCH v5 2/5] overlay: hook filesystem check helper 2018-03-01 12:13 ` [xfstests PATCH v5 2/5] overlay: hook filesystem " zhangyi (F) @ 2018-03-01 13:03 ` Amir Goldstein 2018-03-01 13:11 ` zhangyi (F) 2018-03-01 13:17 ` Eryu Guan 0 siblings, 2 replies; 14+ messages in thread From: Amir Goldstein @ 2018-03-01 13:03 UTC (permalink / raw) To: zhangyi (F) Cc: Eryu Guan, fstests, overlayfs, Miklos Szeredi, Miao Xie, yangerkun On Thu, Mar 1, 2018 at 2:13 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: > Hook filesystem check helper to _check_test_fs and _check_scratch_fs > for checking consistency of underlying dirs of overlay filesystem. > These helpers works only if fsck.overlay exists. > > This patch introduce OVERLAY_FSCK_OPTIONS use for check overlayfs like > OVERLAY_MOUNT_OPTIONS, and also introduce a mount point check helper in > common/rc to detect a dir is a mount point or not. > > [ _check_test_fs/_check_scratch_fs part picked from Amir's patch, thanks ] > > Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> > --- > README.overlay | 10 ++++-- > common/config | 4 +++ > common/overlay | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > common/rc | 18 +++++++++-- > 4 files changed, 127 insertions(+), 4 deletions(-) > > diff --git a/README.overlay b/README.overlay > index dfb8234..3cbefab 100644 > --- a/README.overlay > +++ b/README.overlay > @@ -22,6 +22,10 @@ the base fs should be pre-formatted before starting the -overlay run. > An easy way to accomplish this is by running './check <some test>' once, > before running './check -overlay'. > > +'./check -overlay' support check overlay test and scratch dirs, > +OVERLAY_FSCK_OPTIONS should be set instead of FSCK_OPTIONS if fsck > +options need to given directly. > + > Because of the lack of mkfs support, multi-section config files are only > partly supported with './check -overlay'. Only multi-section files that > do not change FSTYP and MKFS_OPTIONS can be safely used with -overlay. > @@ -40,7 +44,9 @@ run overlay tests on the same base fs, but with different mount options: > MOUNT_OPTIONS="-o pquota" > TEST_FS_MOUNT_OPTS="-o noatime" > OVERLAY_MOUNT_OPTIONS="-o redirect_dir=off" > + OVERLAY_FSCK_OPTIONS="-n redirect_dir=off" typo for the phony options. I believe it is going to be: "-n -o redirect_dir=off" > > In the example above, MOUNT_OPTIONS will be used to mount the base scratch fs, > -TEST_FS_MOUNT_OPTS will be used to mount the base test fs and > -OVERLAY_MOUNT_OPTIONS will be used to mount both test and scratch overlays. > +TEST_FS_MOUNT_OPTS will be used to mount the base test fs, > +OVERLAY_MOUNT_OPTIONS will be used to mount both test and scratch overlay and > +OVERLAY_FSCK_OPTIONS will be used to check both test and scratch overlay. > diff --git a/common/config b/common/config > index 71115bd..20f0e5f 100644 > --- a/common/config > +++ b/common/config > @@ -566,6 +566,10 @@ _overlay_config_override() > # Set SCRATCH vars to overlay base and mount dirs inside base fs > export SCRATCH_DEV="$OVL_BASE_SCRATCH_MNT" > export SCRATCH_MNT="$OVL_BASE_SCRATCH_MNT/$OVL_MNT" > + > + # Set fsck options, use default if user not set directly. > + export FSCK_OPTIONS="$OVERLAY_FSCK_OPTIONS" > + [ -z "$FSCK_OPTIONS" ] && _fsck_opts > } > > _overlay_config_restore() > diff --git a/common/overlay b/common/overlay > index e1b07f4..5d01e5e 100644 > --- a/common/overlay > +++ b/common/overlay > @@ -190,3 +190,102 @@ _overlay_fsck_dirs() > $FSCK_OVERLAY_PROG -o lowerdir=$lowerdir -o upperdir=$upperdir \ > -o workdir=$workdir $* > } > + > +_overlay_check_dirs() > +{ > + local lowerdir=$1 > + local upperdir=$2 > + local workdir=$3 > + shift 3 > + local err=0 > + > + _overlay_fsck_dirs $lowerdir $upperdir $workdir \ > + $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 > + > + return $err > +} > + > +_overlay_check_fs() > +{ > + # The first arguments is overlay mount point use for checking > + # overlay filesystem is mounted or not, the remaining arquments > + # use for mounting overlay base filesystem if it was not mounted. > + # We shift one to aligns arguments for _overlay_base_mount. > + local ovl_mnt=$1 > + shift 1 > + > + local base_dev=$3 > + local base_mnt=$4 > + > + [ "$FSTYP" = overlay ] || return 0 > + > + # Base fs needs to be mounted to check overlay dirs > + local base_fstype="" > + local ovl_mounted="" > + > + [ -z "$base_dev" ] || \ > + base_fstype=`_fs_type $base_dev` > + > + # If base_dev is set but base_fstype is empty, base fs is not > + # mounted, we need to mount base fs. Otherwise, we need to > + # check and umount overlayfs if it was mounted. > + if [ -n "$base_dev" -a -z "$base_fstype" ]; then > + _overlay_base_mount $* > + else > + # Check and umount overlay for dir check > + ovl_mounted=`_is_dir_mountpoint $ovl_mnt` > + [ -z "$ovl_mounted" ] || $UMOUNT_PROG $ovl_mnt > + fi > + > + _overlay_check_dirs $base_mnt/$OVL_LOWER $base_mnt/$OVL_UPPER \ > + $base_mnt/$OVL_WORK > + local ret=$? > + > + if [ -n "$base_dev" -a -z "$base_fstype" ]; then > + _overlay_base_unmount "$base_dev" "$base_mnt" > + elif [ $ret -eq 0 -a -n "$ovl_mounted" ]; then > + # overlay was mounted, remount besides extra mount options > + _overlay_mount $base_mnt $ovl_mnt > + ret=$? > + fi > + > + if [ $ret != 0 ]; then > + status=1 > + if [ "$iam" != "check" ]; then > + exit 1 > + fi > + return 1 > + fi > + > + return 0 > +} > + > +_check_overlay_test_fs() > +{ > + _overlay_check_fs "$TEST_DIR" \ > + 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 "$SCRATCH_MNT" \ > + 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 1dae3bf..9317674 100644 > --- a/common/rc > +++ b/common/rc > @@ -2395,6 +2395,20 @@ _is_dev_mounted() > findmnt -rncv -S $dev -t $fstype -o TARGET | head -1 > } > > +# check if the given dir is a mount point, if so, return mount point > +_is_dir_mountpoint() > +{ > + local dir=$1 > + local fstype=${2:-$FSTYP} > + > + if [ $# -lt 1 ]; then > + echo "Uasge: _is_dir_mountpoint <dir> [fstype]" 1>&2 > + exit 1 > + fi > + > + findmnt -rncv -t $fstype -o TARGET $dir | head -1 > +} > + > # remount a FS to a new mode (ro or rw) > # > _remount() > @@ -2590,7 +2604,7 @@ _check_test_fs() > # no way to check consistency for GlusterFS > ;; > overlay) > - # no way to check consistency for overlay > + _check_overlay_test_fs > ;; > pvfs2) > ;; > @@ -2648,7 +2662,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.5.0 > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [xfstests PATCH v5 2/5] overlay: hook filesystem check helper 2018-03-01 13:03 ` Amir Goldstein @ 2018-03-01 13:11 ` zhangyi (F) 2018-03-11 8:12 ` Amir Goldstein 2018-03-01 13:17 ` Eryu Guan 1 sibling, 1 reply; 14+ messages in thread From: zhangyi (F) @ 2018-03-01 13:11 UTC (permalink / raw) To: Amir Goldstein Cc: Eryu Guan, fstests, overlayfs, Miklos Szeredi, Miao Xie, yangerkun On 2018/3/1 21:03, Amir Goldstein Wrote: > On Thu, Mar 1, 2018 at 2:13 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: >> Hook filesystem check helper to _check_test_fs and _check_scratch_fs >> for checking consistency of underlying dirs of overlay filesystem. >> These helpers works only if fsck.overlay exists. >> >> This patch introduce OVERLAY_FSCK_OPTIONS use for check overlayfs like >> OVERLAY_MOUNT_OPTIONS, and also introduce a mount point check helper in >> common/rc to detect a dir is a mount point or not. >> >> [ _check_test_fs/_check_scratch_fs part picked from Amir's patch, thanks ] >> >> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> >> --- >> README.overlay | 10 ++++-- >> common/config | 4 +++ >> common/overlay | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> common/rc | 18 +++++++++-- >> 4 files changed, 127 insertions(+), 4 deletions(-) >> >> diff --git a/README.overlay b/README.overlay >> index dfb8234..3cbefab 100644 >> --- a/README.overlay >> +++ b/README.overlay >> @@ -22,6 +22,10 @@ the base fs should be pre-formatted before starting the -overlay run. >> An easy way to accomplish this is by running './check <some test>' once, >> before running './check -overlay'. >> >> +'./check -overlay' support check overlay test and scratch dirs, >> +OVERLAY_FSCK_OPTIONS should be set instead of FSCK_OPTIONS if fsck >> +options need to given directly. >> + >> Because of the lack of mkfs support, multi-section config files are only >> partly supported with './check -overlay'. Only multi-section files that >> do not change FSTYP and MKFS_OPTIONS can be safely used with -overlay. >> @@ -40,7 +44,9 @@ run overlay tests on the same base fs, but with different mount options: >> MOUNT_OPTIONS="-o pquota" >> TEST_FS_MOUNT_OPTS="-o noatime" >> OVERLAY_MOUNT_OPTIONS="-o redirect_dir=off" >> + OVERLAY_FSCK_OPTIONS="-n redirect_dir=off" > > typo for the phony options. I believe it is going to be: "-n -o > redirect_dir=off" Oh, sorry for the mistake, it is "-n -o redirect_dir=off" Thanks, Yi. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [xfstests PATCH v5 2/5] overlay: hook filesystem check helper 2018-03-01 13:11 ` zhangyi (F) @ 2018-03-11 8:12 ` Amir Goldstein 2018-03-12 8:44 ` zhangyi (F) 0 siblings, 1 reply; 14+ messages in thread From: Amir Goldstein @ 2018-03-11 8:12 UTC (permalink / raw) To: zhangyi (F) Cc: Eryu Guan, fstests, overlayfs, Miklos Szeredi, Miao Xie, yangerkun On Thu, Mar 1, 2018 at 3:11 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: > On 2018/3/1 21:03, Amir Goldstein Wrote: >> On Thu, Mar 1, 2018 at 2:13 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: >>> Hook filesystem check helper to _check_test_fs and _check_scratch_fs >>> for checking consistency of underlying dirs of overlay filesystem. >>> These helpers works only if fsck.overlay exists. >>> >>> This patch introduce OVERLAY_FSCK_OPTIONS use for check overlayfs like >>> OVERLAY_MOUNT_OPTIONS, and also introduce a mount point check helper in >>> common/rc to detect a dir is a mount point or not. >>> >>> [ _check_test_fs/_check_scratch_fs part picked from Amir's patch, thanks ] >>> >>> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> >>> --- >>> README.overlay | 10 ++++-- >>> common/config | 4 +++ >>> common/overlay | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>> common/rc | 18 +++++++++-- >>> 4 files changed, 127 insertions(+), 4 deletions(-) >>> >>> diff --git a/README.overlay b/README.overlay >>> index dfb8234..3cbefab 100644 >>> --- a/README.overlay >>> +++ b/README.overlay >>> @@ -22,6 +22,10 @@ the base fs should be pre-formatted before starting the -overlay run. >>> An easy way to accomplish this is by running './check <some test>' once, >>> before running './check -overlay'. >>> >>> +'./check -overlay' support check overlay test and scratch dirs, >>> +OVERLAY_FSCK_OPTIONS should be set instead of FSCK_OPTIONS if fsck >>> +options need to given directly. >>> + >>> Because of the lack of mkfs support, multi-section config files are only >>> partly supported with './check -overlay'. Only multi-section files that >>> do not change FSTYP and MKFS_OPTIONS can be safely used with -overlay. >>> @@ -40,7 +44,9 @@ run overlay tests on the same base fs, but with different mount options: >>> MOUNT_OPTIONS="-o pquota" >>> TEST_FS_MOUNT_OPTS="-o noatime" >>> OVERLAY_MOUNT_OPTIONS="-o redirect_dir=off" >>> + OVERLAY_FSCK_OPTIONS="-n redirect_dir=off" >> >> typo for the phony options. I believe it is going to be: "-n -o >> redirect_dir=off" > > Oh, sorry for the mistake, it is "-n -o redirect_dir=off" > Zhangyi, One thing that has occurred to me now, which should be fixed before first release is that fsck.overlay should return an error for unknown/unsupported options (e.g. fsck.overlay -o blah doesn't complain). If this doesn't happen for first release then in the future we will not be able to write test scripts to check if installed fsck.overlay version supports feature X. About the possible meaning of <feature>=on/off and the meaning of <defaults> in the context of fsck.overlay, I think it is worth a separate discussion, but the way I see it: - When fsck.overlay *supports* a <feature> it should be able to detect if that <feature> was ever enabled on overlay (e.g. known xattr exists or index dir exists). - When fsck.overlay detects an unknown <feature> it should abort - -o <feature>=off means wipe all traces of <feature> from overlay and fix if necessary (e.g. make a copy of redirect dir before removing redirect_dir xattr) - -o <feature>=on means bring overlay to a "feature consistent state", as if feature was enabled from day 1 (e.g. index all copies up lower hardlinks) - If <feature>=[on/off] is not specified, then if <feature> is not detected, it should not be explicitly enabled and if feature is detected it should be made consistent That last rule is certainly debatable, so maybe best if we leave that decision to admin via default policy configuration file. Cheers, Amir. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [xfstests PATCH v5 2/5] overlay: hook filesystem check helper 2018-03-11 8:12 ` Amir Goldstein @ 2018-03-12 8:44 ` zhangyi (F) 2018-03-12 9:19 ` Amir Goldstein 0 siblings, 1 reply; 14+ messages in thread From: zhangyi (F) @ 2018-03-12 8:44 UTC (permalink / raw) To: Amir Goldstein Cc: Eryu Guan, fstests, overlayfs, Miklos Szeredi, Miao Xie, yangerkun On 2018/3/11 16:12, Amir Goldstein Wrote: > On Thu, Mar 1, 2018 at 3:11 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: >> On 2018/3/1 21:03, Amir Goldstein Wrote: >>> On Thu, Mar 1, 2018 at 2:13 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: >>>> Hook filesystem check helper to _check_test_fs and _check_scratch_fs >>>> for checking consistency of underlying dirs of overlay filesystem. >>>> These helpers works only if fsck.overlay exists. >>>> >>>> This patch introduce OVERLAY_FSCK_OPTIONS use for check overlayfs like >>>> OVERLAY_MOUNT_OPTIONS, and also introduce a mount point check helper in >>>> common/rc to detect a dir is a mount point or not. >>>> >>>> [ _check_test_fs/_check_scratch_fs part picked from Amir's patch, thanks ] >>>> >>>> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> >>>> --- >>>> README.overlay | 10 ++++-- >>>> common/config | 4 +++ >>>> common/overlay | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>>> common/rc | 18 +++++++++-- >>>> 4 files changed, 127 insertions(+), 4 deletions(-) >>>> >>>> diff --git a/README.overlay b/README.overlay >>>> index dfb8234..3cbefab 100644 >>>> --- a/README.overlay >>>> +++ b/README.overlay >>>> @@ -22,6 +22,10 @@ the base fs should be pre-formatted before starting the -overlay run. >>>> An easy way to accomplish this is by running './check <some test>' once, >>>> before running './check -overlay'. >>>> >>>> +'./check -overlay' support check overlay test and scratch dirs, >>>> +OVERLAY_FSCK_OPTIONS should be set instead of FSCK_OPTIONS if fsck >>>> +options need to given directly. >>>> + >>>> Because of the lack of mkfs support, multi-section config files are only >>>> partly supported with './check -overlay'. Only multi-section files that >>>> do not change FSTYP and MKFS_OPTIONS can be safely used with -overlay. >>>> @@ -40,7 +44,9 @@ run overlay tests on the same base fs, but with different mount options: >>>> MOUNT_OPTIONS="-o pquota" >>>> TEST_FS_MOUNT_OPTS="-o noatime" >>>> OVERLAY_MOUNT_OPTIONS="-o redirect_dir=off" >>>> + OVERLAY_FSCK_OPTIONS="-n redirect_dir=off" >>> >>> typo for the phony options. I believe it is going to be: "-n -o >>> redirect_dir=off" >> >> Oh, sorry for the mistake, it is "-n -o redirect_dir=off" >> > > Zhangyi, > > One thing that has occurred to me now, which should be fixed before > first release > is that fsck.overlay should return an error for unknown/unsupported options > (e.g. fsck.overlay -o blah doesn't complain). > If this doesn't happen for first release then in the future we will > not be able to > write test scripts to check if installed fsck.overlay version supports > feature X. > Yes, It's time to impliment the feature/option set and do the corresponding work for the already known features. I am writing the kernel side feature set recent days, I will add these feature into fsck.overlay after kernel's work done. BTW, the feature set in kernel do the following, some suggestions? 1) Add feature set into upper root xattr "trusted.overlay.feature_[compat|imcompat|rocompat]" if user give mount options "xxx=on" or some feature xattr/dir detected. 2) If unknown imcompat feature in xattr detected, fall back to try to ro-mount. 3) If unknown ro-compat featrure in xattr detected, mount fail. > About the possible meaning of <feature>=on/off and the meaning of <defaults> > in the context of fsck.overlay, I think it is worth a separate > discussion, but the > way I see it: > - When fsck.overlay *supports* a <feature> it should be able to detect if that > <feature> was ever enabled on overlay (e.g. known xattr exists or > index dir exists). Agree, and we can also fix feature set when detect feature. > - When fsck.overlay detects an unknown <feature> it should abort Agree. A little more detail: if user specify upper and work dir, check imcompat unknown feature; if not, check ro-imcompat unknown feature. If detected, fsck about. > - -o <feature>=off means wipe all traces of <feature> from overlay and fix if > necessary (e.g. make a copy of redirect dir before removing > redirect_dir xattr) Agree. But not sure it is easy to implement of making a copy of redirect dir when redirect_dir=off. Because it modify the directory hierarchy, it may affect the origin/nlink xattr in files/dirs in index dir when index=on or nfs_export=on, maybe also affect some other feature future. > - -o <feature>=on means bring overlay to a "feature consistent state", > as if feature > was enabled from day 1 (e.g. index all copies up lower hardlinks) Agree. > - If <feature>=[on/off] is not specified, then if <feature> is not > detected, it should > not be explicitly enabled and if feature is detected it should be > made consistent Agree. > That last rule is certainly debatable, so maybe best if we leave that > decision to > admin via default policy configuration file. > Something like /etc/mke2fs.conf but not for mkfs? Do you mean if feature detected conflict with this config(eg: we detect redirect dir but "redirect_dir=off" was setted in ths config file), fsck should check and fix fs according to this config file? I think it may confusion and conflict with mount options(eg: redirect_dir=on) previous mount or next mount. And IIUC, there is no such feature config file for ext4/xfs, fsck.ext4 will detect feature from super block and fix fs according to this detected result. So I think it's better to detect feature feature by fsck itself, keep features as it was. Thanks, Yi. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [xfstests PATCH v5 2/5] overlay: hook filesystem check helper 2018-03-12 8:44 ` zhangyi (F) @ 2018-03-12 9:19 ` Amir Goldstein 2018-03-12 12:34 ` zhangyi (F) 0 siblings, 1 reply; 14+ messages in thread From: Amir Goldstein @ 2018-03-12 9:19 UTC (permalink / raw) To: zhangyi (F) Cc: Eryu Guan, fstests, overlayfs, Miklos Szeredi, Miao Xie, yangerkun On Mon, Mar 12, 2018 at 10:44 AM, zhangyi (F) <yi.zhang@huawei.com> wrote: > On 2018/3/11 16:12, Amir Goldstein Wrote: >> On Thu, Mar 1, 2018 at 3:11 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: >>> On 2018/3/1 21:03, Amir Goldstein Wrote: >>>> On Thu, Mar 1, 2018 at 2:13 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: >>>>> Hook filesystem check helper to _check_test_fs and _check_scratch_fs >>>>> for checking consistency of underlying dirs of overlay filesystem. >>>>> These helpers works only if fsck.overlay exists. >>>>> >>>>> This patch introduce OVERLAY_FSCK_OPTIONS use for check overlayfs like >>>>> OVERLAY_MOUNT_OPTIONS, and also introduce a mount point check helper in >>>>> common/rc to detect a dir is a mount point or not. >>>>> >>>>> [ _check_test_fs/_check_scratch_fs part picked from Amir's patch, thanks ] >>>>> >>>>> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> >>>>> --- >>>>> README.overlay | 10 ++++-- >>>>> common/config | 4 +++ >>>>> common/overlay | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>>>> common/rc | 18 +++++++++-- >>>>> 4 files changed, 127 insertions(+), 4 deletions(-) >>>>> >>>>> diff --git a/README.overlay b/README.overlay >>>>> index dfb8234..3cbefab 100644 >>>>> --- a/README.overlay >>>>> +++ b/README.overlay >>>>> @@ -22,6 +22,10 @@ the base fs should be pre-formatted before starting the -overlay run. >>>>> An easy way to accomplish this is by running './check <some test>' once, >>>>> before running './check -overlay'. >>>>> >>>>> +'./check -overlay' support check overlay test and scratch dirs, >>>>> +OVERLAY_FSCK_OPTIONS should be set instead of FSCK_OPTIONS if fsck >>>>> +options need to given directly. >>>>> + >>>>> Because of the lack of mkfs support, multi-section config files are only >>>>> partly supported with './check -overlay'. Only multi-section files that >>>>> do not change FSTYP and MKFS_OPTIONS can be safely used with -overlay. >>>>> @@ -40,7 +44,9 @@ run overlay tests on the same base fs, but with different mount options: >>>>> MOUNT_OPTIONS="-o pquota" >>>>> TEST_FS_MOUNT_OPTS="-o noatime" >>>>> OVERLAY_MOUNT_OPTIONS="-o redirect_dir=off" >>>>> + OVERLAY_FSCK_OPTIONS="-n redirect_dir=off" >>>> >>>> typo for the phony options. I believe it is going to be: "-n -o >>>> redirect_dir=off" >>> >>> Oh, sorry for the mistake, it is "-n -o redirect_dir=off" >>> >> >> Zhangyi, >> >> One thing that has occurred to me now, which should be fixed before >> first release >> is that fsck.overlay should return an error for unknown/unsupported options >> (e.g. fsck.overlay -o blah doesn't complain). >> If this doesn't happen for first release then in the future we will >> not be able to >> write test scripts to check if installed fsck.overlay version supports >> feature X. >> > Yes, It's time to impliment the feature/option set and do the corresponding > work for the already known features. I am writing the kernel side feature set > recent days, I will add these feature into fsck.overlay after kernel's work done. > > BTW, the feature set in kernel do the following, some suggestions? > 1) Add feature set into upper root xattr "trusted.overlay.feature_[compat|imcompat|rocompat]" > if user give mount options "xxx=on" or some feature xattr/dir detected. > 2) If unknown imcompat feature in xattr detected, fall back to try to ro-mount. fail mount for unknown incompat > 3) If unknown ro-compat featrure in xattr detected, mount fail. fallback to ro-mount (see ext4_feature_set_ok()) > >> About the possible meaning of <feature>=on/off and the meaning of <defaults> >> in the context of fsck.overlay, I think it is worth a separate >> discussion, but the >> way I see it: >> - When fsck.overlay *supports* a <feature> it should be able to detect if that >> <feature> was ever enabled on overlay (e.g. known xattr exists or >> index dir exists). > > Agree, and we can also fix feature set when detect feature. > >> - When fsck.overlay detects an unknown <feature> it should abort > > Agree. A little more detail: if user specify upper and work dir, check imcompat > unknown feature; if not, check ro-imcompat unknown feature. If detected, fsck > about. > No exactly. The difference between ext4 kernel driver and e2fsck - ext4 *allows* to mount with unknown compat features and *allows* to mount ro with unknonw ro-compat features. e2fsck *aborts* for any unknown compat/rocompat/incomapt feature Meaning that you MAY be able to mount new ext4 with old kernel, but you CANNOT fsck new ext4 with old e2fsck >> - -o <feature>=off means wipe all traces of <feature> from overlay and fix if >> necessary (e.g. make a copy of redirect dir before removing >> redirect_dir xattr) > > Agree. But not sure it is easy to implement of making a copy of redirect dir > when redirect_dir=off. Because it modify the directory hierarchy, it may affect > the origin/nlink xattr in files/dirs in index dir when index=on or nfs_export=on, > maybe also affect some other feature future. > This is why fsck MUST refuse to run if it detects an unknown feature, even if that feature is "compatible" for rw mounting, fixing may break it. And about disabling redirect_dir, yes, it means that all renamed directories are replaced with pure opaque (not indexed) directories and all the content from merged dir needs to be copied up recursively to the new directory. This is not trivial and may be time consuming, but with underlying fs clone support it is also not that bad. In fact, if you try to 'mv dir newdir' on overlay without redirect_dir, the 'mv' tool already does that fallback to create new dir and recursive rename. >> - -o <feature>=on means bring overlay to a "feature consistent state", >> as if feature >> was enabled from day 1 (e.g. index all copies up lower hardlinks) > > Agree. > >> - If <feature>=[on/off] is not specified, then if <feature> is not >> detected, it should >> not be explicitly enabled and if feature is detected it should be >> made consistent > > Agree. > >> That last rule is certainly debatable, so maybe best if we leave that >> decision to >> admin via default policy configuration file. >> > > Something like /etc/mke2fs.conf but not for mkfs? Do you mean if feature > detected conflict with this config(eg: we detect redirect dir but "redirect_dir=off" > was setted in ths config file), fsck should check and fix fs according to this > config file? > > I think it may confusion and conflict with mount options(eg: redirect_dir=on) > previous mount or next mount. And IIUC, there is no such feature config file for > ext4/xfs, fsck.ext4 will detect feature from super block and fix fs according to > this detected result. So I think it's better to detect feature feature by fsck > itself, keep features as it was. > I agree it is best to not ask user anything because user probably doesn't know the answer anyway. If you follow the discussion that has started on adding a config file for mkfs.xfs, you'll see it is mainly intended to be used by distributions. Imagine a disro that set the kernel config OVERLAY_FS_INDEX with the intention that all overlays will be indexed. This distro may want to make the default behavior of fsck.overlay to construct an index by default. For you, the role of a config file is to reduce "bike shedding" - if there are conflicting options about what should be done in case feature X is detected or not detected and option X=on/off is not specified, instead of debating what the right thing to do by default, you delegate the decision to "config file" and set the hard coded default to what *you* think is the best behavior. So my advise to you is to add a config file if and only if (or when) it becomes beneficial to you for reconciling different opinions. Cheers, Amir. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [xfstests PATCH v5 2/5] overlay: hook filesystem check helper 2018-03-12 9:19 ` Amir Goldstein @ 2018-03-12 12:34 ` zhangyi (F) 0 siblings, 0 replies; 14+ messages in thread From: zhangyi (F) @ 2018-03-12 12:34 UTC (permalink / raw) To: Amir Goldstein Cc: Eryu Guan, fstests, overlayfs, Miklos Szeredi, Miao Xie, yangerkun On 2018/3/12 17:19, Amir Goldstein Wrote: > On Mon, Mar 12, 2018 at 10:44 AM, zhangyi (F) <yi.zhang@huawei.com> wrote: >> On 2018/3/11 16:12, Amir Goldstein Wrote: >>> On Thu, Mar 1, 2018 at 3:11 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: >>>> On 2018/3/1 21:03, Amir Goldstein Wrote: >>>>> On Thu, Mar 1, 2018 at 2:13 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: >>>>>> Hook filesystem check helper to _check_test_fs and _check_scratch_fs >>>>>> for checking consistency of underlying dirs of overlay filesystem. >>>>>> These helpers works only if fsck.overlay exists. >>>>>> >>>>>> This patch introduce OVERLAY_FSCK_OPTIONS use for check overlayfs like >>>>>> OVERLAY_MOUNT_OPTIONS, and also introduce a mount point check helper in >>>>>> common/rc to detect a dir is a mount point or not. >>>>>> >>>>>> [ _check_test_fs/_check_scratch_fs part picked from Amir's patch, thanks ] >>>>>> >>>>>> Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> >>>>>> --- >>>>>> README.overlay | 10 ++++-- >>>>>> common/config | 4 +++ >>>>>> common/overlay | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>>>>> common/rc | 18 +++++++++-- >>>>>> 4 files changed, 127 insertions(+), 4 deletions(-) >>>>>> >>>>>> diff --git a/README.overlay b/README.overlay >>>>>> index dfb8234..3cbefab 100644 >>>>>> --- a/README.overlay >>>>>> +++ b/README.overlay >>>>>> @@ -22,6 +22,10 @@ the base fs should be pre-formatted before starting the -overlay run. >>>>>> An easy way to accomplish this is by running './check <some test>' once, >>>>>> before running './check -overlay'. >>>>>> >>>>>> +'./check -overlay' support check overlay test and scratch dirs, >>>>>> +OVERLAY_FSCK_OPTIONS should be set instead of FSCK_OPTIONS if fsck >>>>>> +options need to given directly. >>>>>> + >>>>>> Because of the lack of mkfs support, multi-section config files are only >>>>>> partly supported with './check -overlay'. Only multi-section files that >>>>>> do not change FSTYP and MKFS_OPTIONS can be safely used with -overlay. >>>>>> @@ -40,7 +44,9 @@ run overlay tests on the same base fs, but with different mount options: >>>>>> MOUNT_OPTIONS="-o pquota" >>>>>> TEST_FS_MOUNT_OPTS="-o noatime" >>>>>> OVERLAY_MOUNT_OPTIONS="-o redirect_dir=off" >>>>>> + OVERLAY_FSCK_OPTIONS="-n redirect_dir=off" >>>>> >>>>> typo for the phony options. I believe it is going to be: "-n -o >>>>> redirect_dir=off" >>>> >>>> Oh, sorry for the mistake, it is "-n -o redirect_dir=off" >>>> >>> >>> Zhangyi, >>> >>> One thing that has occurred to me now, which should be fixed before >>> first release >>> is that fsck.overlay should return an error for unknown/unsupported options >>> (e.g. fsck.overlay -o blah doesn't complain). >>> If this doesn't happen for first release then in the future we will >>> not be able to >>> write test scripts to check if installed fsck.overlay version supports >>> feature X. >>> >> Yes, It's time to impliment the feature/option set and do the corresponding >> work for the already known features. I am writing the kernel side feature set >> recent days, I will add these feature into fsck.overlay after kernel's work done. >> >> BTW, the feature set in kernel do the following, some suggestions? >> 1) Add feature set into upper root xattr "trusted.overlay.feature_[compat|imcompat|rocompat]" >> if user give mount options "xxx=on" or some feature xattr/dir detected. >> 2) If unknown imcompat feature in xattr detected, fall back to try to ro-mount. > > fail mount for unknown incompat > >> 3) If unknown ro-compat featrure in xattr detected, mount fail. > > fallback to ro-mount (see ext4_feature_set_ok()) > You are right, I get it. >> >>> About the possible meaning of <feature>=on/off and the meaning of <defaults> >>> in the context of fsck.overlay, I think it is worth a separate >>> discussion, but the >>> way I see it: >>> - When fsck.overlay *supports* a <feature> it should be able to detect if that >>> <feature> was ever enabled on overlay (e.g. known xattr exists or >>> index dir exists). >> >> Agree, and we can also fix feature set when detect feature. >> >>> - When fsck.overlay detects an unknown <feature> it should abort >> >> Agree. A little more detail: if user specify upper and work dir, check imcompat >> unknown feature; if not, check ro-imcompat unknown feature. If detected, fsck >> about. >> > > No exactly. The difference between ext4 kernel driver and e2fsck - > ext4 *allows* to mount with unknown compat features > and *allows* to mount ro with unknonw ro-compat features. > e2fsck *aborts* for any unknown compat/rocompat/incomapt feature > > Meaning that you MAY be able to mount new ext4 with old kernel, > but you CANNOT fsck new ext4 with old e2fsck > Yes, you are right, I see this check in e2fsck/unix.c. >>> - -o <feature>=off means wipe all traces of <feature> from overlay and fix if >>> necessary (e.g. make a copy of redirect dir before removing >>> redirect_dir xattr) >> >> Agree. But not sure it is easy to implement of making a copy of redirect dir >> when redirect_dir=off. Because it modify the directory hierarchy, it may affect >> the origin/nlink xattr in files/dirs in index dir when index=on or nfs_export=on, >> maybe also affect some other feature future. >> > > This is why fsck MUST refuse to run if it detects an unknown feature, even > if that feature is "compatible" for rw mounting, fixing may break it. > Right. > And about disabling redirect_dir, yes, it means that all renamed directories > are replaced with pure opaque (not indexed) directories and all the content > from merged dir needs to be copied up recursively to the new directory. > This is not trivial and may be time consuming, but with underlying fs clone > support it is also not that bad. > In fact, if you try to 'mv dir newdir' on overlay without redirect_dir, the 'mv' > tool already does that fallback to create new dir and recursive rename. > Yes, we can do the same thing like "mv" does when overlayfs doesn't support rename syscall for dir(redirect_dir=off). >>> - -o <feature>=on means bring overlay to a "feature consistent state", >>> as if feature >>> was enabled from day 1 (e.g. index all copies up lower hardlinks) >> >> Agree. >> >>> - If <feature>=[on/off] is not specified, then if <feature> is not >>> detected, it should >>> not be explicitly enabled and if feature is detected it should be >>> made consistent >> >> Agree. >> >>> That last rule is certainly debatable, so maybe best if we leave that >>> decision to >>> admin via default policy configuration file. >>> >> >> Something like /etc/mke2fs.conf but not for mkfs? Do you mean if feature >> detected conflict with this config(eg: we detect redirect dir but "redirect_dir=off" >> was setted in ths config file), fsck should check and fix fs according to this >> config file? >> >> I think it may confusion and conflict with mount options(eg: redirect_dir=on) >> previous mount or next mount. And IIUC, there is no such feature config file for >> ext4/xfs, fsck.ext4 will detect feature from super block and fix fs according to >> this detected result. So I think it's better to detect feature feature by fsck >> itself, keep features as it was. >> > > I agree it is best to not ask user anything because user probably doesn't know > the answer anyway. If you follow the discussion that has started on adding a > config file for mkfs.xfs, you'll see it is mainly intended to be used > by distributions. > Imagine a disro that set the kernel config OVERLAY_FS_INDEX with the > intention that all overlays will be indexed. This distro may want to make the > default behavior of fsck.overlay to construct an index by default. > > For you, the role of a config file is to reduce "bike shedding" - if there are > conflicting options about what should be done in case feature X is detected > or not detected and option X=on/off is not specified, instead of > debating what the > right thing to do by default, you delegate the decision to "config > file" and set the > hard coded default to what *you* think is the best behavior. > > So my advise to you is to add a config file if and only if (or when) it > becomes beneficial to you for reconciling different opinions. > Yes, I get your point, It's a good point to avoid debate, and seems no apparent defects. I'd like to add this file if no different opinions. Thanks, Yi. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [xfstests PATCH v5 2/5] overlay: hook filesystem check helper 2018-03-01 13:03 ` Amir Goldstein 2018-03-01 13:11 ` zhangyi (F) @ 2018-03-01 13:17 ` Eryu Guan 1 sibling, 0 replies; 14+ messages in thread From: Eryu Guan @ 2018-03-01 13:17 UTC (permalink / raw) To: Amir Goldstein Cc: zhangyi (F), fstests, overlayfs, Miklos Szeredi, Miao Xie, yangerkun On Thu, Mar 01, 2018 at 03:03:55PM +0200, Amir Goldstein wrote: > On Thu, Mar 1, 2018 at 2:13 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: > > Hook filesystem check helper to _check_test_fs and _check_scratch_fs > > for checking consistency of underlying dirs of overlay filesystem. > > These helpers works only if fsck.overlay exists. > > > > This patch introduce OVERLAY_FSCK_OPTIONS use for check overlayfs like > > OVERLAY_MOUNT_OPTIONS, and also introduce a mount point check helper in > > common/rc to detect a dir is a mount point or not. > > > > [ _check_test_fs/_check_scratch_fs part picked from Amir's patch, thanks ] > > > > Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> > > --- > > README.overlay | 10 ++++-- > > common/config | 4 +++ > > common/overlay | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > common/rc | 18 +++++++++-- > > 4 files changed, 127 insertions(+), 4 deletions(-) > > > > diff --git a/README.overlay b/README.overlay > > index dfb8234..3cbefab 100644 > > --- a/README.overlay > > +++ b/README.overlay > > @@ -22,6 +22,10 @@ the base fs should be pre-formatted before starting the -overlay run. > > An easy way to accomplish this is by running './check <some test>' once, > > before running './check -overlay'. > > > > +'./check -overlay' support check overlay test and scratch dirs, > > +OVERLAY_FSCK_OPTIONS should be set instead of FSCK_OPTIONS if fsck > > +options need to given directly. > > + > > Because of the lack of mkfs support, multi-section config files are only > > partly supported with './check -overlay'. Only multi-section files that > > do not change FSTYP and MKFS_OPTIONS can be safely used with -overlay. > > @@ -40,7 +44,9 @@ run overlay tests on the same base fs, but with different mount options: > > MOUNT_OPTIONS="-o pquota" > > TEST_FS_MOUNT_OPTS="-o noatime" > > OVERLAY_MOUNT_OPTIONS="-o redirect_dir=off" > > + OVERLAY_FSCK_OPTIONS="-n redirect_dir=off" > > typo for the phony options. I believe it is going to be: "-n -o > redirect_dir=off" I can fix it on commit. Thanks for review! Eryu ^ permalink raw reply [flat|nested] 14+ messages in thread
* [xfstests PATCH v5 3/5] overlay/003: fix fs check failure 2018-03-01 12:13 [xfstests PATCH v5 0/5] overlay: add overlay filesystem dirs check zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 1/5] common/rc: improve dev mounted check helper zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 2/5] overlay: hook filesystem " zhangyi (F) @ 2018-03-01 12:13 ` zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 4/5] overlay: skip check for tests finished with corrupt filesystem zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 5/5] overlay: correct scratch dirs check zhangyi (F) 4 siblings, 0 replies; 14+ messages in thread From: zhangyi (F) @ 2018-03-01 12:13 UTC (permalink / raw) To: eguan, fstests Cc: linux-unionfs, miklos, amir73il, 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> Reviewed-by: Amir Goldstein <amir73il@gmail.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.5.0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [xfstests PATCH v5 4/5] overlay: skip check for tests finished with corrupt filesystem 2018-03-01 12:13 [xfstests PATCH v5 0/5] overlay: add overlay filesystem dirs check zhangyi (F) ` (2 preceding siblings ...) 2018-03-01 12:13 ` [xfstests PATCH v5 3/5] overlay/003: fix fs check failure zhangyi (F) @ 2018-03-01 12:13 ` zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 5/5] overlay: correct scratch dirs check zhangyi (F) 4 siblings, 0 replies; 14+ messages in thread From: zhangyi (F) @ 2018-03-01 12:13 UTC (permalink / raw) To: eguan, fstests Cc: linux-unionfs, miklos, amir73il, yi.zhang, miaoxie, yangerkun No post-test check of the overlay dirs is required if case leaves corrupt filesystem after test. We shoud use _require_scratch_nocheck() instead of _require_scratch() in these cases. Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> Reviewed-by: Amir Goldstein <amir73il@gmail.com> --- tests/overlay/019 | 2 +- tests/overlay/031 | 2 +- tests/overlay/049 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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 diff --git a/tests/overlay/031 b/tests/overlay/031 index 186b409..90a06af 100755 --- a/tests/overlay/031 +++ b/tests/overlay/031 @@ -67,7 +67,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 runs _scratch_mkfs diff --git a/tests/overlay/049 b/tests/overlay/049 index ef00138..1dafc46 100755 --- a/tests/overlay/049 +++ b/tests/overlay/049 @@ -72,7 +72,7 @@ rm -f $seqres.full # real QA test starts here _supported_fs overlay _supported_os Linux -_require_scratch +_require_scratch_nocheck _require_scratch_feature redirect_dir # remove all files from previous runs -- 2.5.0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [xfstests PATCH v5 5/5] overlay: correct scratch dirs check 2018-03-01 12:13 [xfstests PATCH v5 0/5] overlay: add overlay filesystem dirs check zhangyi (F) ` (3 preceding siblings ...) 2018-03-01 12:13 ` [xfstests PATCH v5 4/5] overlay: skip check for tests finished with corrupt filesystem zhangyi (F) @ 2018-03-01 12:13 ` zhangyi (F) 2018-03-01 13:09 ` Amir Goldstein 4 siblings, 1 reply; 14+ messages in thread From: zhangyi (F) @ 2018-03-01 12:13 UTC (permalink / raw) To: eguan, fstests Cc: linux-unionfs, miklos, amir73il, yi.zhang, miaoxie, yangerkun Tests that use _overlay_scratch_mount_dirs instead of _scratch_mount should use _require_scratch_nocheck instead of _require_scratch because these tests are either mounting with multiple lower dirs or mounting with non-default lower/upper/work dir, so _check_overlay_scratch_fs won't handle these cases correctly. So we introduce _overlay_check_scratch_dirs helper and should call this helper with the correct dir arguments for these non-default cases. This patch modify these tests to optionally call _overlay_check_scratch_dirs at the end of the test or after _scratch_umount to mount base filesystem only and run the checker. Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> Reviewed-by: Amir Goldstein <amir73il@gmail.com> --- common/overlay | 29 +++++++++++++++++++++++++++++ tests/overlay/005 | 7 ++++++- tests/overlay/010 | 7 ++++++- tests/overlay/014 | 10 +++++++++- tests/overlay/035 | 7 ++++++- tests/overlay/036 | 6 +++++- tests/overlay/037 | 7 ++++++- tests/overlay/038 | 10 +++++++++- tests/overlay/041 | 10 +++++++++- tests/overlay/043 | 7 ++++++- tests/overlay/044 | 8 +++++++- tests/overlay/051 | 10 ++++++++-- tests/overlay/053 | 10 ++++++++-- tests/overlay/055 | 10 ++++++++-- 14 files changed, 122 insertions(+), 16 deletions(-) diff --git a/common/overlay b/common/overlay index 5d01e5e..441827b 100644 --- a/common/overlay +++ b/common/overlay @@ -219,6 +219,35 @@ _overlay_check_dirs() return $err } +# Check the same mnt/dev of _check_overlay_scratch_fs but non-default +# underlying scratch dirs of overlayfs, it needs lower/upper/work dirs +# provided as arguments, and it's useful for non-default setups such +# as multiple lower layers +_overlay_check_scratch_dirs() +{ + local lowerdir=$1 + local upperdir=$2 + local workdir=$3 + shift 3 + + # Need to umount overlay for scratch dir check + local ovl_mounted=`_is_dir_mountpoint $SCRATCH_MNT` + [ -z "$ovl_mounted" ] || $UMOUNT_PROG $SCRATCH_MNT + + # Check dirs with extra overlay options + _overlay_check_dirs $lowerdir $upperdir $workdir $* + local ret=$? + + if [ $ret -eq 0 -a -n "$ovl_mounted" ]; then + # overlay was mounted, remount with extra mount options + _overlay_scratch_mount_dirs $lowerdir $upperdir \ + $workdir $* + ret=$? + fi + + return $ret +} + _overlay_check_fs() { # The first arguments is overlay mount point use for checking diff --git a/tests/overlay/005 b/tests/overlay/005 index 17992a3..87fc9bb 100755 --- a/tests/overlay/005 +++ b/tests/overlay/005 @@ -54,7 +54,9 @@ rm -f $seqres.full # Modify as appropriate. _supported_fs overlay _supported_os Linux -_require_scratch +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck _require_loop # Remove all files from previous tests @@ -102,6 +104,9 @@ $XFS_IO_PROG -f -c "o" ${SCRATCH_MNT}/test_file \ # unmount overlayfs $UMOUNT_PROG $SCRATCH_MNT +# check overlayfs +_overlay_check_scratch_dirs $lowerd $upperd $workd + # unmount undelying xfs, this tiggers panic if memleak happens $UMOUNT_PROG ${OVL_BASE_SCRATCH_MNT}/uppermnt $UMOUNT_PROG ${OVL_BASE_SCRATCH_MNT}/lowermnt diff --git a/tests/overlay/010 b/tests/overlay/010 index f55ebec..32af89c 100755 --- a/tests/overlay/010 +++ b/tests/overlay/010 @@ -48,7 +48,9 @@ rm -f $seqres.full # real QA test starts here _supported_fs overlay _supported_os Linux -_require_scratch +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck # Remove all files from previous tests _scratch_mkfs @@ -70,6 +72,9 @@ mknod $lowerdir2/testdir/a c 0 0 _overlay_scratch_mount_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir rm -rf $SCRATCH_MNT/testdir +# check overlayfs +_overlay_check_scratch_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir + # success, all done echo "Silence is golden" status=0 diff --git a/tests/overlay/014 b/tests/overlay/014 index 9f308d3..67fad9f 100755 --- a/tests/overlay/014 +++ b/tests/overlay/014 @@ -53,7 +53,9 @@ rm -f $seqres.full # real QA test starts here _supported_fs overlay _supported_os Linux -_require_scratch +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck # Remove all files from previous tests _scratch_mkfs @@ -78,6 +80,9 @@ mkdir -p $SCRATCH_MNT/testdir/visibledir # unmount overlayfs but not base fs $UMOUNT_PROG $SCRATCH_MNT +# check overlayfs +_overlay_check_scratch_dirs $lowerdir1 $lowerdir2 $workdir2 + # 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 @@ -90,6 +95,9 @@ $UMOUNT_PROG $SCRATCH_MNT _overlay_scratch_mount_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir ls $SCRATCH_MNT/testdir +# check overlayfs +_overlay_check_scratch_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir + # success, all done status=0 exit diff --git a/tests/overlay/035 b/tests/overlay/035 index 0544774..d1b2c19 100755 --- a/tests/overlay/035 +++ b/tests/overlay/035 @@ -51,7 +51,9 @@ rm -f $seqres.full # real QA test starts here _supported_fs overlay _supported_os Linux -_require_scratch +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck _require_chattr i # Remove all files from previous tests @@ -81,6 +83,9 @@ _overlay_scratch_mount_dirs $lowerdir2 $upperdir $workdir touch $SCRATCH_MNT/bar 2>&1 | _filter_scratch _scratch_remount rw 2>&1 | _filter_ro_mount +# check overlayfs +_overlay_check_scratch_dirs $lowerdir2 $upperdir $workdir + # success, all done status=0 exit diff --git a/tests/overlay/036 b/tests/overlay/036 index e04aaee..8d3ccf4 100755 --- a/tests/overlay/036 +++ b/tests/overlay/036 @@ -69,7 +69,9 @@ rm -f $seqres.full # real QA test starts here _supported_fs overlay _supported_os Linux -_require_scratch +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck _require_scratch_feature index # Remove all files from previous tests @@ -110,6 +112,8 @@ _overlay_mount_dirs $lowerdir $upperdir $workdir2 \ _overlay_mount_dirs $lowerdir2 $upperdir2 $workdir \ overlay3 $SCRATCH_MNT -oindex=on 2>&1 | _filter_busy_mount +# check overlayfs +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir # success, all done status=0 diff --git a/tests/overlay/037 b/tests/overlay/037 index 6710dda..4e2e5df 100755 --- a/tests/overlay/037 +++ b/tests/overlay/037 @@ -55,7 +55,9 @@ rm -f $seqres.full # real QA test starts here _supported_fs overlay _supported_os Linux -_require_scratch +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck _require_scratch_feature index # Remove all files from previous tests @@ -87,6 +89,9 @@ $UMOUNT_PROG $SCRATCH_MNT 2>/dev/null # Mount overlay with original lowerdir, upperdir, workdir and index=on - expect success _overlay_scratch_mount_dirs $lowerdir $upperdir $workdir -oindex=on +# check overlayfs +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir -oindex=on + # success, all done status=0 exit diff --git a/tests/overlay/038 b/tests/overlay/038 index bd87156..972a16e 100755 --- a/tests/overlay/038 +++ b/tests/overlay/038 @@ -46,7 +46,9 @@ _cleanup() # real QA test starts here _supported_fs overlay _supported_os Linux -_require_scratch +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck _require_attrs _require_test_program "t_dir_type" @@ -163,6 +165,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino) _scratch_unmount +# check overlayfs +_check_scratch_fs + # Verify pure lower residing in dir which has another lower layer _scratch_mkfs @@ -202,6 +207,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino) [[ $subdir_d == "subdir d" ]] || \ echo "Pure lower in dir which has another lower layer: Invalid d_ino reported for subdir" +# check overlayfs +_overlay_check_scratch_dirs "$middir:$lowerdir" $upperdir $workdir + echo "Silence is golden" status=0 exit diff --git a/tests/overlay/041 b/tests/overlay/041 index 11efacb..4e72348 100755 --- a/tests/overlay/041 +++ b/tests/overlay/041 @@ -48,7 +48,9 @@ _cleanup() # real QA test starts here _supported_fs overlay _supported_os Linux -_require_scratch +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck _require_test _require_attrs _require_test_program "t_dir_type" @@ -168,6 +170,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino) _scratch_unmount +# check overlayfs +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir + # Verify pure lower residing in dir which has another lower layer middir=$OVL_BASE_TEST_DIR/$seq-ovl-mid lowerdir=$OVL_BASE_TEST_DIR/$seq-ovl-lower @@ -206,6 +211,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino) [[ $subdir_d == "subdir d" ]] || \ echo "Pure lower in dir which has another lower layer: Invalid d_ino reported for subdir" +# check overlayfs +_overlay_check_scratch_dirs "$middir:$lowerdir" $upperdir $workdir + echo "Silence is golden" status=0 exit diff --git a/tests/overlay/043 b/tests/overlay/043 index 699c4e1..46df686 100755 --- a/tests/overlay/043 +++ b/tests/overlay/043 @@ -56,7 +56,9 @@ _cleanup() # real QA test starts here _supported_fs overlay _supported_os Linux -_require_scratch +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck _require_test _require_test_program "af_unix" _require_test_program "t_dir_type" @@ -153,6 +155,9 @@ _overlay_scratch_mount_dirs $lowerdir $upperdir $workdir # Compare inode numbers before/after mount cycle check_inode_numbers $testdir $tmp.after_move $tmp.after_cycle +# check overlayfs +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir + echo "Silence is golden" status=0 exit diff --git a/tests/overlay/044 b/tests/overlay/044 index e57f6f7..2ab3035 100755 --- a/tests/overlay/044 +++ b/tests/overlay/044 @@ -49,7 +49,9 @@ _cleanup() # real QA test starts here _supported_fs overlay _supported_os Linux -_require_scratch +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck _require_test _require_scratch_feature index _require_test_program "t_dir_type" @@ -122,6 +124,7 @@ check_ino_nlink $SCRATCH_MNT $tmp.before $tmp.after_one # Verify that the hardlinks survive a mount cycle $UMOUNT_PROG $SCRATCH_MNT +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir -o index=on _overlay_scratch_mount_dirs $lowerdir $upperdir $workdir -o index=on echo "== After mount cycle ==" @@ -138,5 +141,8 @@ echo "== After write two ==" cat $FILES check_ino_nlink $SCRATCH_MNT $tmp.after_one $tmp.after_two +# check overlayfs +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir -o index=on + status=0 exit diff --git a/tests/overlay/051 b/tests/overlay/051 index ae7844d..04bd133 100755 --- a/tests/overlay/051 +++ b/tests/overlay/051 @@ -61,8 +61,10 @@ _cleanup() _supported_fs overlay _supported_os Linux _require_test -_require_scratch _require_test_program "open_by_handle" +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck # We need to require both features together, because nfs_export cannot # be enabled when index is disabled _require_scratch_overlay_features index nfs_export @@ -122,10 +124,14 @@ mount_dirs() -o "index=on,nfs_export=on" } -# Unmount the overlay without unmounting base fs +# Unmount the overlay without unmounting base fs and check the +# underlying dirs unmount_dirs() { $UMOUNT_PROG $SCRATCH_MNT + + _overlay_check_scratch_dirs $middle:$lower $upper $work \ + -o "index=on,nfs_export=on" } # Check non-stale file handles of lower/upper files and verify diff --git a/tests/overlay/053 b/tests/overlay/053 index d4fdcde..d766cde 100755 --- a/tests/overlay/053 +++ b/tests/overlay/053 @@ -63,8 +63,10 @@ _cleanup() _supported_fs overlay _supported_os Linux _require_test -_require_scratch _require_test_program "open_by_handle" +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck # We need to require all features together, because nfs_export cannot # be enabled when index is disabled _require_scratch_overlay_features index nfs_export redirect_dir @@ -118,10 +120,14 @@ mount_dirs() -o "index=on,nfs_export=on,redirect_dir=on" } -# Unmount the overlay without unmounting base fs +# Unmount the overlay without unmounting base fs and check the +# underlying dirs unmount_dirs() { $UMOUNT_PROG $SCRATCH_MNT + + _overlay_check_scratch_dirs $middle:$lower $upper $work \ + -o "index=on,nfs_export=on,redirect_dir=on" } # Check non-stale file handles of lower/upper moved files diff --git a/tests/overlay/055 b/tests/overlay/055 index 70fe6ac..02da6ef 100755 --- a/tests/overlay/055 +++ b/tests/overlay/055 @@ -67,8 +67,10 @@ _cleanup() _supported_fs overlay _supported_os Linux _require_test -_require_scratch _require_test_program "open_by_handle" +# Use non-default scratch underlying overlay dirs, we need to check +# them explicity after test. +_require_scratch_nocheck # We need to require all features together, because nfs_export cannot # be enabled when index is disabled _require_scratch_overlay_features index nfs_export redirect_dir @@ -122,10 +124,14 @@ mount_dirs() -o "index=on,nfs_export=on,redirect_dir=on" } -# Unmount the overlay without unmounting base fs +# Unmount the overlay without unmounting base fs and check the +# underlying dirs unmount_dirs() { $UMOUNT_PROG $SCRATCH_MNT + + _overlay_check_scratch_dirs $middle:$lower $upper $work \ + -o "index=on,nfs_export=on,redirect_dir=on" } # Check file handles of dir with ancestor under lower redirect -- 2.5.0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [xfstests PATCH v5 5/5] overlay: correct scratch dirs check 2018-03-01 12:13 ` [xfstests PATCH v5 5/5] overlay: correct scratch dirs check zhangyi (F) @ 2018-03-01 13:09 ` Amir Goldstein 0 siblings, 0 replies; 14+ messages in thread From: Amir Goldstein @ 2018-03-01 13:09 UTC (permalink / raw) To: zhangyi (F) Cc: Eryu Guan, fstests, overlayfs, Miklos Szeredi, Miao Xie, yangerkun On Thu, Mar 1, 2018 at 2:13 PM, zhangyi (F) <yi.zhang@huawei.com> wrote: > Tests that use _overlay_scratch_mount_dirs instead of _scratch_mount > should use _require_scratch_nocheck instead of _require_scratch > because these tests are either mounting with multiple lower dirs or > mounting with non-default lower/upper/work dir, so > _check_overlay_scratch_fs won't handle these cases correctly. So we > introduce _overlay_check_scratch_dirs helper and should call this > helper with the correct dir arguments for these non-default cases. > > This patch modify these tests to optionally call > _overlay_check_scratch_dirs at the end of the test or after > _scratch_umount to mount base filesystem only and run the checker. > > Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> > Reviewed-by: Amir Goldstein <amir73il@gmail.com> Looks ok to me. > --- > common/overlay | 29 +++++++++++++++++++++++++++++ > tests/overlay/005 | 7 ++++++- > tests/overlay/010 | 7 ++++++- > tests/overlay/014 | 10 +++++++++- > tests/overlay/035 | 7 ++++++- > tests/overlay/036 | 6 +++++- > tests/overlay/037 | 7 ++++++- > tests/overlay/038 | 10 +++++++++- > tests/overlay/041 | 10 +++++++++- > tests/overlay/043 | 7 ++++++- > tests/overlay/044 | 8 +++++++- > tests/overlay/051 | 10 ++++++++-- > tests/overlay/053 | 10 ++++++++-- > tests/overlay/055 | 10 ++++++++-- > 14 files changed, 122 insertions(+), 16 deletions(-) > > diff --git a/common/overlay b/common/overlay > index 5d01e5e..441827b 100644 > --- a/common/overlay > +++ b/common/overlay > @@ -219,6 +219,35 @@ _overlay_check_dirs() > return $err > } > > +# Check the same mnt/dev of _check_overlay_scratch_fs but non-default > +# underlying scratch dirs of overlayfs, it needs lower/upper/work dirs > +# provided as arguments, and it's useful for non-default setups such > +# as multiple lower layers > +_overlay_check_scratch_dirs() > +{ > + local lowerdir=$1 > + local upperdir=$2 > + local workdir=$3 > + shift 3 > + > + # Need to umount overlay for scratch dir check > + local ovl_mounted=`_is_dir_mountpoint $SCRATCH_MNT` > + [ -z "$ovl_mounted" ] || $UMOUNT_PROG $SCRATCH_MNT > + > + # Check dirs with extra overlay options > + _overlay_check_dirs $lowerdir $upperdir $workdir $* > + local ret=$? > + > + if [ $ret -eq 0 -a -n "$ovl_mounted" ]; then > + # overlay was mounted, remount with extra mount options > + _overlay_scratch_mount_dirs $lowerdir $upperdir \ > + $workdir $* > + ret=$? > + fi > + > + return $ret > +} > + > _overlay_check_fs() > { > # The first arguments is overlay mount point use for checking > diff --git a/tests/overlay/005 b/tests/overlay/005 > index 17992a3..87fc9bb 100755 > --- a/tests/overlay/005 > +++ b/tests/overlay/005 > @@ -54,7 +54,9 @@ rm -f $seqres.full > # Modify as appropriate. > _supported_fs overlay > _supported_os Linux > -_require_scratch > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > _require_loop > > # Remove all files from previous tests > @@ -102,6 +104,9 @@ $XFS_IO_PROG -f -c "o" ${SCRATCH_MNT}/test_file \ > # unmount overlayfs > $UMOUNT_PROG $SCRATCH_MNT > > +# check overlayfs > +_overlay_check_scratch_dirs $lowerd $upperd $workd > + > # unmount undelying xfs, this tiggers panic if memleak happens > $UMOUNT_PROG ${OVL_BASE_SCRATCH_MNT}/uppermnt > $UMOUNT_PROG ${OVL_BASE_SCRATCH_MNT}/lowermnt > diff --git a/tests/overlay/010 b/tests/overlay/010 > index f55ebec..32af89c 100755 > --- a/tests/overlay/010 > +++ b/tests/overlay/010 > @@ -48,7 +48,9 @@ rm -f $seqres.full > # real QA test starts here > _supported_fs overlay > _supported_os Linux > -_require_scratch > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > > # Remove all files from previous tests > _scratch_mkfs > @@ -70,6 +72,9 @@ mknod $lowerdir2/testdir/a c 0 0 > _overlay_scratch_mount_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir > rm -rf $SCRATCH_MNT/testdir > > +# check overlayfs > +_overlay_check_scratch_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir > + > # success, all done > echo "Silence is golden" > status=0 > diff --git a/tests/overlay/014 b/tests/overlay/014 > index 9f308d3..67fad9f 100755 > --- a/tests/overlay/014 > +++ b/tests/overlay/014 > @@ -53,7 +53,9 @@ rm -f $seqres.full > # real QA test starts here > _supported_fs overlay > _supported_os Linux > -_require_scratch > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > > # Remove all files from previous tests > _scratch_mkfs > @@ -78,6 +80,9 @@ mkdir -p $SCRATCH_MNT/testdir/visibledir > # unmount overlayfs but not base fs > $UMOUNT_PROG $SCRATCH_MNT > > +# check overlayfs > +_overlay_check_scratch_dirs $lowerdir1 $lowerdir2 $workdir2 > + > # 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 > @@ -90,6 +95,9 @@ $UMOUNT_PROG $SCRATCH_MNT > _overlay_scratch_mount_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir > ls $SCRATCH_MNT/testdir > > +# check overlayfs > +_overlay_check_scratch_dirs "$lowerdir2:$lowerdir1" $upperdir $workdir > + > # success, all done > status=0 > exit > diff --git a/tests/overlay/035 b/tests/overlay/035 > index 0544774..d1b2c19 100755 > --- a/tests/overlay/035 > +++ b/tests/overlay/035 > @@ -51,7 +51,9 @@ rm -f $seqres.full > # real QA test starts here > _supported_fs overlay > _supported_os Linux > -_require_scratch > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > _require_chattr i > > # Remove all files from previous tests > @@ -81,6 +83,9 @@ _overlay_scratch_mount_dirs $lowerdir2 $upperdir $workdir > touch $SCRATCH_MNT/bar 2>&1 | _filter_scratch > _scratch_remount rw 2>&1 | _filter_ro_mount > > +# check overlayfs > +_overlay_check_scratch_dirs $lowerdir2 $upperdir $workdir > + > # success, all done > status=0 > exit > diff --git a/tests/overlay/036 b/tests/overlay/036 > index e04aaee..8d3ccf4 100755 > --- a/tests/overlay/036 > +++ b/tests/overlay/036 > @@ -69,7 +69,9 @@ rm -f $seqres.full > # real QA test starts here > _supported_fs overlay > _supported_os Linux > -_require_scratch > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > _require_scratch_feature index > > # Remove all files from previous tests > @@ -110,6 +112,8 @@ _overlay_mount_dirs $lowerdir $upperdir $workdir2 \ > _overlay_mount_dirs $lowerdir2 $upperdir2 $workdir \ > overlay3 $SCRATCH_MNT -oindex=on 2>&1 | _filter_busy_mount > > +# check overlayfs > +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir > > # success, all done > status=0 > diff --git a/tests/overlay/037 b/tests/overlay/037 > index 6710dda..4e2e5df 100755 > --- a/tests/overlay/037 > +++ b/tests/overlay/037 > @@ -55,7 +55,9 @@ rm -f $seqres.full > # real QA test starts here > _supported_fs overlay > _supported_os Linux > -_require_scratch > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > _require_scratch_feature index > > # Remove all files from previous tests > @@ -87,6 +89,9 @@ $UMOUNT_PROG $SCRATCH_MNT 2>/dev/null > # Mount overlay with original lowerdir, upperdir, workdir and index=on - expect success > _overlay_scratch_mount_dirs $lowerdir $upperdir $workdir -oindex=on > > +# check overlayfs > +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir -oindex=on > + > # success, all done > status=0 > exit > diff --git a/tests/overlay/038 b/tests/overlay/038 > index bd87156..972a16e 100755 > --- a/tests/overlay/038 > +++ b/tests/overlay/038 > @@ -46,7 +46,9 @@ _cleanup() > # real QA test starts here > _supported_fs overlay > _supported_os Linux > -_require_scratch > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > _require_attrs > _require_test_program "t_dir_type" > > @@ -163,6 +165,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino) > > _scratch_unmount > > +# check overlayfs > +_check_scratch_fs > + > # Verify pure lower residing in dir which has another lower layer > _scratch_mkfs > > @@ -202,6 +207,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino) > [[ $subdir_d == "subdir d" ]] || \ > echo "Pure lower in dir which has another lower layer: Invalid d_ino reported for subdir" > > +# check overlayfs > +_overlay_check_scratch_dirs "$middir:$lowerdir" $upperdir $workdir > + > echo "Silence is golden" > status=0 > exit > diff --git a/tests/overlay/041 b/tests/overlay/041 > index 11efacb..4e72348 100755 > --- a/tests/overlay/041 > +++ b/tests/overlay/041 > @@ -48,7 +48,9 @@ _cleanup() > # real QA test starts here > _supported_fs overlay > _supported_os Linux > -_require_scratch > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > _require_test > _require_attrs > _require_test_program "t_dir_type" > @@ -168,6 +170,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino) > > _scratch_unmount > > +# check overlayfs > +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir > + > # Verify pure lower residing in dir which has another lower layer > middir=$OVL_BASE_TEST_DIR/$seq-ovl-mid > lowerdir=$OVL_BASE_TEST_DIR/$seq-ovl-lower > @@ -206,6 +211,9 @@ subdir_d=$($here/src/t_dir_type $pure_lower_dir $pure_lower_subdir_st_ino) > [[ $subdir_d == "subdir d" ]] || \ > echo "Pure lower in dir which has another lower layer: Invalid d_ino reported for subdir" > > +# check overlayfs > +_overlay_check_scratch_dirs "$middir:$lowerdir" $upperdir $workdir > + > echo "Silence is golden" > status=0 > exit > diff --git a/tests/overlay/043 b/tests/overlay/043 > index 699c4e1..46df686 100755 > --- a/tests/overlay/043 > +++ b/tests/overlay/043 > @@ -56,7 +56,9 @@ _cleanup() > # real QA test starts here > _supported_fs overlay > _supported_os Linux > -_require_scratch > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > _require_test > _require_test_program "af_unix" > _require_test_program "t_dir_type" > @@ -153,6 +155,9 @@ _overlay_scratch_mount_dirs $lowerdir $upperdir $workdir > # Compare inode numbers before/after mount cycle > check_inode_numbers $testdir $tmp.after_move $tmp.after_cycle > > +# check overlayfs > +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir > + > echo "Silence is golden" > status=0 > exit > diff --git a/tests/overlay/044 b/tests/overlay/044 > index e57f6f7..2ab3035 100755 > --- a/tests/overlay/044 > +++ b/tests/overlay/044 > @@ -49,7 +49,9 @@ _cleanup() > # real QA test starts here > _supported_fs overlay > _supported_os Linux > -_require_scratch > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > _require_test > _require_scratch_feature index > _require_test_program "t_dir_type" > @@ -122,6 +124,7 @@ check_ino_nlink $SCRATCH_MNT $tmp.before $tmp.after_one > > # Verify that the hardlinks survive a mount cycle > $UMOUNT_PROG $SCRATCH_MNT > +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir -o index=on > _overlay_scratch_mount_dirs $lowerdir $upperdir $workdir -o index=on > > echo "== After mount cycle ==" > @@ -138,5 +141,8 @@ echo "== After write two ==" > cat $FILES > check_ino_nlink $SCRATCH_MNT $tmp.after_one $tmp.after_two > > +# check overlayfs > +_overlay_check_scratch_dirs $lowerdir $upperdir $workdir -o index=on > + > status=0 > exit > diff --git a/tests/overlay/051 b/tests/overlay/051 > index ae7844d..04bd133 100755 > --- a/tests/overlay/051 > +++ b/tests/overlay/051 > @@ -61,8 +61,10 @@ _cleanup() > _supported_fs overlay > _supported_os Linux > _require_test > -_require_scratch > _require_test_program "open_by_handle" > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > # We need to require both features together, because nfs_export cannot > # be enabled when index is disabled > _require_scratch_overlay_features index nfs_export > @@ -122,10 +124,14 @@ mount_dirs() > -o "index=on,nfs_export=on" > } > > -# Unmount the overlay without unmounting base fs > +# Unmount the overlay without unmounting base fs and check the > +# underlying dirs > unmount_dirs() > { > $UMOUNT_PROG $SCRATCH_MNT > + > + _overlay_check_scratch_dirs $middle:$lower $upper $work \ > + -o "index=on,nfs_export=on" > } > > # Check non-stale file handles of lower/upper files and verify > diff --git a/tests/overlay/053 b/tests/overlay/053 > index d4fdcde..d766cde 100755 > --- a/tests/overlay/053 > +++ b/tests/overlay/053 > @@ -63,8 +63,10 @@ _cleanup() > _supported_fs overlay > _supported_os Linux > _require_test > -_require_scratch > _require_test_program "open_by_handle" > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > # We need to require all features together, because nfs_export cannot > # be enabled when index is disabled > _require_scratch_overlay_features index nfs_export redirect_dir > @@ -118,10 +120,14 @@ mount_dirs() > -o "index=on,nfs_export=on,redirect_dir=on" > } > > -# Unmount the overlay without unmounting base fs > +# Unmount the overlay without unmounting base fs and check the > +# underlying dirs > unmount_dirs() > { > $UMOUNT_PROG $SCRATCH_MNT > + > + _overlay_check_scratch_dirs $middle:$lower $upper $work \ > + -o "index=on,nfs_export=on,redirect_dir=on" > } > > # Check non-stale file handles of lower/upper moved files > diff --git a/tests/overlay/055 b/tests/overlay/055 > index 70fe6ac..02da6ef 100755 > --- a/tests/overlay/055 > +++ b/tests/overlay/055 > @@ -67,8 +67,10 @@ _cleanup() > _supported_fs overlay > _supported_os Linux > _require_test > -_require_scratch > _require_test_program "open_by_handle" > +# Use non-default scratch underlying overlay dirs, we need to check > +# them explicity after test. > +_require_scratch_nocheck > # We need to require all features together, because nfs_export cannot > # be enabled when index is disabled > _require_scratch_overlay_features index nfs_export redirect_dir > @@ -122,10 +124,14 @@ mount_dirs() > -o "index=on,nfs_export=on,redirect_dir=on" > } > > -# Unmount the overlay without unmounting base fs > +# Unmount the overlay without unmounting base fs and check the > +# underlying dirs > unmount_dirs() > { > $UMOUNT_PROG $SCRATCH_MNT > + > + _overlay_check_scratch_dirs $middle:$lower $upper $work \ > + -o "index=on,nfs_export=on,redirect_dir=on" > } > > # Check file handles of dir with ancestor under lower redirect > -- > 2.5.0 > ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2018-03-12 12:34 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-03-01 12:13 [xfstests PATCH v5 0/5] overlay: add overlay filesystem dirs check zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 1/5] common/rc: improve dev mounted check helper zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 2/5] overlay: hook filesystem " zhangyi (F) 2018-03-01 13:03 ` Amir Goldstein 2018-03-01 13:11 ` zhangyi (F) 2018-03-11 8:12 ` Amir Goldstein 2018-03-12 8:44 ` zhangyi (F) 2018-03-12 9:19 ` Amir Goldstein 2018-03-12 12:34 ` zhangyi (F) 2018-03-01 13:17 ` Eryu Guan 2018-03-01 12:13 ` [xfstests PATCH v5 3/5] overlay/003: fix fs check failure zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 4/5] overlay: skip check for tests finished with corrupt filesystem zhangyi (F) 2018-03-01 12:13 ` [xfstests PATCH v5 5/5] overlay: correct scratch dirs check zhangyi (F) 2018-03-01 13:09 ` Amir Goldstein
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.