On Wed, Oct 31, 2018 at 11:55 AM Miklos Szeredi <mszeredi@xxxxxxxxxx> wrote: > > There's a bug in the overlayfs implementation starting from the very first > merged version that may cause an Oops of various forms if a directory is created > over a whiteout dentry, but the actual whiteout on the upper layer was removed > to the directory creation. > > Reported by: kaixuxia <xiakaixu1987@xxxxxxxxx> > Signed-off-by: Miklos Szeredi <mszeredi@xxxxxxxxxx> > --- Looks good. A bit of commentary could be useful... > tests/overlay/062 | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ > tests/overlay/062.out | 2 ++ > tests/overlay/group | 1 + > 3 files changed, 63 insertions(+) > create mode 100644 tests/overlay/062 > create mode 100644 tests/overlay/062.out > > diff --git a/tests/overlay/062 b/tests/overlay/062 > new file mode 100644 > index 000000000000..b2cc350afefb > --- /dev/null > +++ b/tests/overlay/062 > @@ -0,0 +1,60 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2018 Red Hat Inc. All Rights Reserved. > +# > +# FS QA Test 062 > +# > +# Create dir over cached negative dentry, but whiteout removed from upper > +# > +# The following kernel commit fixed the kernel crash: ??? > +# > +seq=`basename $0` > +seqres=$RESULT_DIR/$seq > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > +} > + > +# get standard environment, filters and checks > +. ./common/rc > +. ./common/filter > + > +# remove previous $seqres.full before test > +rm -f $seqres.full > + > +# real QA test starts here > +_supported_fs overlay > +_supported_os Linux > +_require_scratch > + > +# Remove all files from previous tests > +_scratch_mkfs > + > +# Create test file > +lowerdir=${OVL_BASE_SCRATCH_MNT}/${OVL_LOWER} > +upperdir=${OVL_BASE_SCRATCH_MNT}/${OVL_UPPER} > +mkdir -p $lowerdir > +touch ${lowerdir}/file > + > +_scratch_mount > + # Create whiteout and populate dcache with negative dentry > +rm ${SCRATCH_MNT}/file > +ls -l ${SCRATCH_MNT}/file > /dev/null 2>&1 # Remove whiteout and try to create dir over negative dentry > +rm ${upperdir}/file > +mkdir ${SCRATCH_MNT}/file > /dev/null 2>&1 > + > +# unmount overlayfs > +$UMOUNT_PROG $SCRATCH_MNT Umount of scratch is not needed at the end of the test. Thanks, Amir.