On Wed, Sep 20, 2023 at 04:03:55PM +0300, Amir Goldstein wrote: > A test for a regression from v5.15 reported by Ruiwen Zhao: > https://lore.kernel.org/linux-unionfs/CAKd=y5Hpg7J2gxrFT02F94o=FM9QvGp=kcH1Grctx8HzFYvpiA@xxxxxxxxxxxxxx/ > > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> > --- > > Zorro, > > This is a test for a regression in kernel v5.15. > The fix was merged for 6.6-rc2 and has been picked for > the upcoming LTS releases 5.15, 6.1, 6.5. > > The reproducer only manifests the bug in fs that inherit noatime flag, > namely ext4, btrfs, ... but not xfs. > > The test does _notrun on xfs for that reason. > > Thanks, > Amir. > > tests/overlay/082 | 68 +++++++++++++++++++++++++++++++++++++++++++ > tests/overlay/082.out | 2 ++ > 2 files changed, 70 insertions(+) > create mode 100755 tests/overlay/082 > create mode 100644 tests/overlay/082.out > > diff --git a/tests/overlay/082 b/tests/overlay/082 > new file mode 100755 > index 00000000..abea3c2b > --- /dev/null > +++ b/tests/overlay/082 > @@ -0,0 +1,68 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (C) 2023 CTERA Networks. All Rights Reserved. > +# > +# FS QA Test 082 > +# > +# kernel commit 72db82115d2b ("ovl: copy up sync/noatime fileattr flags") > +# from v5.15 introduced a regression. > +# > +. ./common/preamble > +_begin_fstest auto quick > + > +# Import common functions. > +. ./common/filter > + > +# real QA test starts here > +_supported_fs overlay > +_fixed_by_kernel_commit ab048302026d \ > + "ovl: fix failed copyup of fileattr on a symlink" > + > +_require_scratch > +_require_chattr A > + > +# remove all files from previous runs > +_scratch_mkfs > + > +# prepare lower test dir with NOATIME flag > +lowerdir=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER > +mkdir -p $lowerdir/testdir > +$CHATTR_PROG +A $lowerdir/testdir >> $seqres.full 2>&1 || > + _notrun "base fs $OVL_BASE_FSTYP does not support No_Atime flag" > + > +# The NOATIME is inheritted to children symlink in ext4/fs2fs > +# (and on tmpfs on recent kernels). > +# The overlayfs test will not fail unless base fs is > +# one of those filesystems. > +# > +# The problem with this inheritence is that the NOATIME flag is inheritted > +# to a symlink and the flag does take effect, but there is no way to query > +# the flag (lsattr) or change it (chattr) on a symlink, so overlayfs will > +# fail when trying to copy up NOATIME flag from lower to upper symlink. > +# > +touch $lowerdir/testdir/foo > +ln -sf foo $lowerdir/testdir/lnk > + > +$LSATTR_PROG -l $lowerdir/testdir/foo >> $seqres.full 2>&1 > +$LSATTR_PROG -l $lowerdir/testdir/foo | grep -q No_Atime || \ > + _notrun "base fs $OVL_BASE_FSTYP does not inherit No_Atime flag" > + > +before=$(stat -c %x $lowerdir/testdir/lnk) > +echo "symlink atime before readlink: $before" >> $seqres.full 2>&1 > +cat $lowerdir/testdir/lnk > +after=$(stat -c %x $lowerdir/testdir/lnk) > +echo "symlink atime after readlink: $after" >> $seqres.full 2>&1 > + > +[ "$before" == "$after" ] || \ > + _notrun "base fs $OVL_BASE_FSTYP does not inherit No_Atime flag on symlink" > + > +# mounting overlay > +_scratch_mount > + > +# moving symlink will try to copy up lower symlink flags > +mv $SCRATCH_MNT/testdir/lnk $SCRATCH_MNT/ Lots of above codes are checking if the underlying fs supports No_Atime (and inherit), and _notrun if not support. How about do these checking steps in a require_* function locally or in common/, likes _require_noatime_inheritance(). And we also can let _require_chattr accept one more argument to specify a test directory. The "mv ..." command looks like the final testing step. If there's not that bug, nothing happen, but I'm wondering what should happen if there's a bug? Thanks, Zorro > + > +# success, all done > +echo "Silence is golden" > +status=0 > +exit > diff --git a/tests/overlay/082.out b/tests/overlay/082.out > new file mode 100644 > index 00000000..2977f141 > --- /dev/null > +++ b/tests/overlay/082.out > @@ -0,0 +1,2 @@ > +QA output created by 082 > +Silence is golden > -- > 2.34.1 >