From: Eryu Guan <guaneryu@gmail.com>
To: Richard Weinberger <richard@nod.at>
Cc: fstests@vger.kernel.org, koen.vandeputte@ncentric.com
Subject: Re: [PATCH] generic: Test whether xattrs work on unlinked files
Date: Mon, 17 Sep 2018 13:35:49 +0800 [thread overview]
Message-ID: <20180917053549.GB17817@desktop> (raw)
In-Reply-To: <20180916215011.31029-1-richard@nod.at>
On Sun, Sep 16, 2018 at 11:50:11PM +0200, Richard Weinberger wrote:
> On UBIFS we had an embarrassing bug where xattr operations
> worked only for files with nlink > 0.
> Make sure this will never happen again.
>
> Signed-off-by: Richard Weinberger <richard@nod.at>
> ---
> Hi!
>
> I'm not sure whether this is worth a new test, maybe we can add it
> to an existing test? What about generic/020?
Like Amir mentioned, we usually don't add new tests to existing cases. A
new test is totally fine and recommended.
> Since xfs_io does not support xattrs, we need a new C test helper.
Looks like you only need to create an open-but-unlinked file? Maybe you
could take a look at src/multi_open_unlinked.c and its usage and see if
it meets your need.
>
> Thanks,
> //richard
> ---
> src/Makefile | 2 +-
> src/attr_unlinked_test.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
If a new C helper is still needed, please don't forget add an entry for
it in .gitignore.
> tests/generic/505 | 46 +++++++++++++++++++++++++++++++++++++++++
> tests/generic/505.out | 2 ++
> tests/generic/group | 1 +
> 5 files changed, 103 insertions(+), 1 deletion(-)
> create mode 100644 src/attr_unlinked_test.c
> create mode 100755 tests/generic/505
> create mode 100644 tests/generic/505.out
>
> diff --git a/src/Makefile b/src/Makefile
> index 41826585..433fa517 100644
> --- a/src/Makefile
> +++ b/src/Makefile
> @@ -27,7 +27,7 @@ LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \
> renameat2 t_getcwd e4compact test-nextquota punch-alternating \
> attr-list-by-handle-cursor-test listxattr dio-interleaved t_dir_type \
> dio-invalidate-cache stat_test t_encrypted_d_revalidate \
> - attr_replace_test swapon mkswap
> + attr_replace_test swapon mkswap attr_unlinked_test
>
> SUBDIRS = log-writes perf
>
> diff --git a/src/attr_unlinked_test.c b/src/attr_unlinked_test.c
> new file mode 100644
> index 00000000..f3ce6d84
> --- /dev/null
> +++ b/src/attr_unlinked_test.c
> @@ -0,0 +1,53 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Test whether xattr operations work on unlinked files.
> + * based on attr_replace_test.c
> + */
> +#include <stdio.h>
> +#include <string.h>
> +#include <fcntl.h>
> +#include <errno.h>
> +#include <stdlib.h>
> +#include <unistd.h>
> +#include <sys/types.h>
> +#include <sys/xattr.h>
> +#include <sys/stat.h>
> +
> +#define die() do { perror(""); \
> +fprintf(stderr, "error at line %d\n", __LINE__); \
> +exit(1); } while (0)
> +
> +#define fail(...) do { \
> +fprintf(stderr, __VA_ARGS__); exit (1); \
> +} while (0)
> +
> +int main(int argc, char *argv[])
> +{
> + int ret;
> + int fd;
> + char *name = "user.world";
> + char value[] = "hello";
> +
> + if (argc != 2)
> + fail("Usage: %s <file>\n", argv[0]);
> +
> + fd = open(argv[1], O_RDWR | O_DIRECTORY | O_TMPFILE, S_IRUSR | S_IWUSR);
> + if (fd < 0)
> + die();
> +
> + ret = fsetxattr(fd, name, value, sizeof(value), XATTR_CREATE);
> + if (ret < 0)
> + die();
> +
> + ret = fsetxattr(fd, name, value, sizeof(value), XATTR_REPLACE);
> + if (ret < 0)
> + die();
> +
> + ret = fsetxattr(fd, name, NULL, 0, 0);
> + if (ret < 0)
> + die();
> +
> + close(fd);
> +
> + return 0;
> +}
> diff --git a/tests/generic/505 b/tests/generic/505
> new file mode 100755
> index 00000000..6e8bb512
> --- /dev/null
> +++ b/tests/generic/505
> @@ -0,0 +1,46 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# FS QA Test No. 505
> +#
> +# Ensure that xattr operations work also on unlinked files.
> +# UBIFS wrongly assumed that xattr operations are only valid for nlink > 0.
> +#
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +status=1 # failure is the default!
> +trap "_cleanup; exit \$status" 0 1 2 3 15
Please use "./new generic" to generate new test template (and don't
remove the pre-defined variables if you did :-)), it also has "here" and
"tmp" defined. (Even if your test doesn't take use of the variables, but
the common helper functions do).
> +
> +_cleanup()
> +{
> + cd /
> + rm -f $testfile
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +. ./common/attr
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +# real QA test starts here
> +_supported_fs generic
> +_supported_os Linux
> +_require_test_program "attr_unlinked_test"
> +_require_attrs
> +_require_scratch
Seems like test could be done directly on TEST_DEV/TEST_DIR.
Thanks,
Eryu
> +
> +rm -f $seqres.full
> +_scratch_mkfs >>$seqres.full 2>&1
> +_scratch_mount >>$seqres.full 2>&1
> +
> +./src/attr_unlinked_test $SCRATCH_MNT/
> +
> +echo "Silence is golden"
> +
> +status=0
> +exit
> diff --git a/tests/generic/505.out b/tests/generic/505.out
> new file mode 100644
> index 00000000..80e3bd1d
> --- /dev/null
> +++ b/tests/generic/505.out
> @@ -0,0 +1,2 @@
> +QA output created by 505
> +Silence is golden
> diff --git a/tests/generic/group b/tests/generic/group
> index 55155de8..75770f7a 100644
> --- a/tests/generic/group
> +++ b/tests/generic/group
> @@ -507,3 +507,4 @@
> 502 auto quick log
> 503 auto quick dax punch collapse zero
> 504 auto quick locks
> +505 auto quick attr
> --
> 2.11.0
>
prev parent reply other threads:[~2018-09-17 11:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-16 21:50 [PATCH] generic: Test whether xattrs work on unlinked files Richard Weinberger
2018-09-17 4:56 ` Amir Goldstein
2018-09-17 5:23 ` Amir Goldstein
2018-09-17 5:35 ` Eryu Guan [this message]
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=20180917053549.GB17817@desktop \
--to=guaneryu@gmail.com \
--cc=fstests@vger.kernel.org \
--cc=koen.vandeputte@ncentric.com \
--cc=richard@nod.at \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox