From: Eryu Guan <guan@eryu.me>
To: Chengguang Xu <cgxu519@mykernel.net>
Cc: miklos@szeredi.hu, amir73il@gmail.com, fstests@vger.kernel.org,
linux-unionfs@vger.kernel.org
Subject: Re: [PATCH v4] overlay: test for whiteout inode sharing
Date: Sun, 10 May 2020 23:50:37 +0800 [thread overview]
Message-ID: <20200510155037.GB9345@desktop> (raw)
In-Reply-To: <20200506101528.27359-1-cgxu519@mykernel.net>
On Wed, May 06, 2020 at 06:15:28PM +0800, Chengguang Xu wrote:
> This is a test for whiteout inode sharing feature.
>
> Signed-off-by: Chengguang Xu <cgxu519@mykernel.net>
> ---
> v1->v2:
> - Address Amir's comments in v1
>
> v2->v3:
> - Address Amir's comments in v2
>
> v3->v4:
> - Fix test case based on latest kernel patch(removed module param)
> https://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs.git/commit/?h=overlayfs-next&id=4e49695244661568130bfefcb6143dd1eaa3d8e7
>
> tests/overlay/073 | 106 ++++++++++++++++++++++++++++++++++++++++++
> tests/overlay/073.out | 2 +
> tests/overlay/group | 1 +
> 3 files changed, 109 insertions(+)
> create mode 100755 tests/overlay/073
> create mode 100644 tests/overlay/073.out
>
> diff --git a/tests/overlay/073 b/tests/overlay/073
> new file mode 100755
> index 00000000..fc847092
> --- /dev/null
> +++ b/tests/overlay/073
> @@ -0,0 +1,106 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2020 Chengguang Xu <cgxu519@mykernel.net>.
> +# All Rights Reserved.
> +#
> +# FS QA Test 073
> +#
> +# Test whiteout inode sharing functionality.
> +#
> +# A "whiteout" is an object that has special meaning in overlayfs.
> +# A whiteout on an upper layer will effectively hide a matching file
> +# in the lower layer, making it appear as if the file didn't exist.
> +#
> +# Whiteout inode sharing means multiple whiteout objects will share
> +# one inode in upper layer, without this feature every whiteout object
> +# will consume one inode in upper layer.
> +
> +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
I see no feature detection logic, so test just fails on old kernels
without this feature? I tried with v5.7-r4 kernel, test fails because
each whiteout file has only one hardlink.
Thanks,
Eryu
> +
> +lowerdir=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER
> +upperdir=$OVL_BASE_SCRATCH_MNT/$OVL_UPPER
> +workdir=$OVL_BASE_SCRATCH_MNT/$OVL_WORK
> +
> +# Make some testing files in lowerdir.
> +# Argument:
> +# $1: Testing file number
> +make_lower_files()
> +{
> + for name in `seq ${1}`; do
> + touch $lowerdir/file${name} &>/dev/null
> + done
> +}
> +
> +# Delete all copy-uped files in upperdir.
> +make_whiteout_files()
> +{
> + rm -f $SCRATCH_MNT/* &>/dev/null
> +}
> +
> +# Check link count of whiteout files.
> +# Arguments:
> +# $1: Testing file number
> +# $2: Expected link count
> +check_whiteout_files()
> +{
> + for name in `seq ${1}`; do
> + local real_count=`stat -c %h $upperdir/file${name} 2>/dev/null`
> + if [[ ${2} != $real_count ]]; then
> + echo "Expected link count is ${2} but real count is $real_count, file name is file${name}"
> + fi
> + done
> + local tmpfile_count=`ls $workdir/work/\#* $workdir/index/\#* 2>/dev/null |wc -l 2>/dev/null`
> + if [[ -n "$tmpfile_count" && $tmpfile_count > 1 ]]; then
> + echo "There are more than one whiteout tmpfile in work/index dir!"
> + ls -l $workdir/work/\#* $workdir/index/\#* 2>/dev/null
> + fi
> +}
> +
> +# Run test case with specific arguments.
> +# Arguments:
> +# $1: Testing file number
> +# $2: Expected link count
> +run_test_case()
> +{
> + _scratch_mkfs
> + make_lower_files ${1}
> + _scratch_mount
> + make_whiteout_files
> + check_whiteout_files ${1} ${2}
> + _scratch_unmount
> +}
> +
> +#Test case
> +file_count=10
> +link_count=11
> +run_test_case $file_count $link_count
> +
> +# success, all done
> +echo "Silence is golden"
> +status=0
> +exit
> diff --git a/tests/overlay/073.out b/tests/overlay/073.out
> new file mode 100644
> index 00000000..590bbc6c
> --- /dev/null
> +++ b/tests/overlay/073.out
> @@ -0,0 +1,2 @@
> +QA output created by 073
> +Silence is golden
> diff --git a/tests/overlay/group b/tests/overlay/group
> index 43ad8a52..8b2276f1 100644
> --- a/tests/overlay/group
> +++ b/tests/overlay/group
> @@ -74,3 +74,4 @@
> 070 auto quick copyup redirect nested
> 071 auto quick copyup redirect nested nonsamefs
> 072 auto quick copyup hardlink
> +073 auto quick whiteout
> --
> 2.20.1
>
next prev parent reply other threads:[~2020-05-10 15:50 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-06 10:15 [PATCH v4] overlay/072: test for whiteout inode sharing Chengguang Xu
2020-05-06 10:19 ` Amir Goldstein
2020-05-10 15:50 ` Eryu Guan [this message]
2020-05-11 1:32 ` [PATCH v4] overlay: " Chengguang Xu
2020-05-12 16:25 ` Eryu Guan
2020-05-12 16:56 ` Amir Goldstein
2020-05-13 1:10 ` Eryu Guan
2020-05-13 3:17 ` Chengguang Xu
2020-05-13 3:37 ` Amir Goldstein
2020-05-13 9:35 ` Miklos Szeredi
2020-05-13 10:54 ` 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=20200510155037.GB9345@desktop \
--to=guan@eryu.me \
--cc=amir73il@gmail.com \
--cc=cgxu519@mykernel.net \
--cc=fstests@vger.kernel.org \
--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.