All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eryu Guan <guan@eryu.me>
To: Amir Goldstein <amir73il@gmail.com>
Cc: Eryu Guan <guaneryu@gmail.com>,
	Miklos Szeredi <miklos@szeredi.hu>,
	linux-unionfs@vger.kernel.org, fstests@vger.kernel.org
Subject: Re: [PATCH] overlay: another test for dropping nlink below zero
Date: Sun, 19 Apr 2020 23:01:47 +0800	[thread overview]
Message-ID: <20200419150147.GF388005@desktop> (raw)
In-Reply-To: <20200409112223.14496-1-amir73il@gmail.com>

On Thu, Apr 09, 2020 at 02:22:23PM +0300, Amir Goldstein wrote:
> This is a variant on test overlay/034.
> 
> This variant is mangling upper hardlinks instead of lower hardlinks
> and does not require the inodes index feature.
> 
> This is a regression test for kernel commit 83552eacdfc0
> ("ovl: fix WARN_ON nlink drop to zero")
> 
> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
> ---
> 
> Eryu,
> 
> The kernel fix commit just got merged.
> 
> Thanks,
> Amir.
> 
>  tests/overlay/072     | 85 +++++++++++++++++++++++++++++++++++++++++++
>  tests/overlay/072.out |  2 +
>  tests/overlay/group   |  1 +
>  3 files changed, 88 insertions(+)
>  create mode 100755 tests/overlay/072
>  create mode 100644 tests/overlay/072.out
> 
> diff --git a/tests/overlay/072 b/tests/overlay/072
> new file mode 100755
> index 00000000..e9084e5c
> --- /dev/null
> +++ b/tests/overlay/072
> @@ -0,0 +1,85 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (C) 2020 CTERA Networks. All Rights Reserved.
> +#
> +# FS QA Test 072
> +#
> +# Test overlay nlink when adding upper hardlinks.
> +#
> +# nlink of overlay inode could be dropped indefinitely by adding
> +# unaccounted upper hardlinks underneath a mounted overlay and
> +# trying to remove them.
> +#
> +# This is a variant of test overlay/034 with mangling of upper instead
> +# of lower hardlinks. Unlike overlay/034, this test does not require the
> +# inode index feature and will pass whether is it enabled or disabled
> +# by default.
> +#
> +# This is a regression test for kernel commit 83552eacdfc0
> +# ("ovl: fix WARN_ON nlink drop to zero").
> +# Without the fix, the test triggers
> +# WARN_ON(inode->i_nlink == 0) in drop_link().
> +#
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +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
> +
> +upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER
> +
> +# Remove all files from previous tests
> +_scratch_mkfs
> +
> +# Create lower hardlink

It seems there're some stale comments that are copied from overlay/034,
above is one of them, should be "Create upper hardlink"

> +mkdir -p $upperdir
> +touch $upperdir/0
> +ln $upperdir/0 $upperdir/1
> +
> +_scratch_mount
> +
> +# Copy up lower hardlink - overlay inode nlink 2 is copied from lower
> +touch $SCRATCH_MNT/0

There's no copyup, then do we need this touch at all?

> +
> +# Add lower hardlinks while overlay is mounted - overlay inode nlink

Add upper hardlinks ...

> +# is not being updated
> +ln $upperdir/0 $upperdir/2
> +ln $upperdir/0 $upperdir/3
> +
> +# Unlink the 2 un-accounted lower hardlinks - overlay inode nlinks
                               ^^^^^ upper?

Thanks,
Eryu

> +# drops 2 and may reach 0 if the situation is not detected
> +rm $SCRATCH_MNT/2
> +rm $SCRATCH_MNT/3
> +
> +# Check if getting ENOENT when trying to link !I_LINKABLE with nlink 0
> +ln $SCRATCH_MNT/0 $SCRATCH_MNT/4
> +
> +# Unlink all hardlinks - if overlay inode nlink is 0, this will trigger
> +# WARN_ON() in drop_nlink()
> +rm $SCRATCH_MNT/0
> +rm $SCRATCH_MNT/1
> +rm $SCRATCH_MNT/4
> +
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/overlay/072.out b/tests/overlay/072.out
> new file mode 100644
> index 00000000..590bbc6c
> --- /dev/null
> +++ b/tests/overlay/072.out
> @@ -0,0 +1,2 @@
> +QA output created by 072
> +Silence is golden
> diff --git a/tests/overlay/group b/tests/overlay/group
> index 43ad8a52..82876d09 100644
> --- a/tests/overlay/group
> +++ b/tests/overlay/group
> @@ -74,3 +74,4 @@
>  069 auto quick copyup hardlink exportfs nested nonsamefs
>  070 auto quick copyup redirect nested
>  071 auto quick copyup redirect nested nonsamefs
> +072 auto quick copyup hardlink
> -- 
> 2.17.1
> 

  reply	other threads:[~2020-04-19 15:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-09 11:22 [PATCH] overlay: another test for dropping nlink below zero Amir Goldstein
2020-04-19 15:01 ` Eryu Guan [this message]
2020-04-19 15:42   ` Amir Goldstein

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200419150147.GF388005@desktop \
    --to=guan@eryu.me \
    --cc=amir73il@gmail.com \
    --cc=fstests@vger.kernel.org \
    --cc=guaneryu@gmail.com \
    --cc=linux-unionfs@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.