[LTP] [PATCH v2 01/13] syscalls/quotactl01: Also test with vfsv1 format

xuyang2018.jy@fujitsu.com xuyang2018.jy@fujitsu.com
Mon Nov 8 04:27:59 CET 2021


Hi All

ping.

There is no problem with the first six patches and other patches need to
be modified v3(needs mkfs.ext4 supports quota feature when quota info
hidden in filesystem and open mntpoint instead of testfile when using
quotactl_fd).

I guess we can review the first six patches and merged, then I will send
a v3 for others.

ps: Remove testfile for quotactl_fd and use mntpoint directly. See the
discussion in the following url:
https://lore.kernel.org/linux-man/20211105112045.GA26497@quack2.suse.cz/T/#m41a9666d01d43a29973a5a6a61b02b0c4e9f0df1

Best Regards
Yang Xu
> Since usrquota and groupquota supports visible quota files
> with two formats(vfsv0 and vfsv1) on ext4, so add a test variants to
> test it.
> 
> Also fix docparse formatting and move some code to lapi/quotactl.h or
> quotactl_var.h for reuse.
> 
> Remove useless geteuid.
> 
> Signed-off-by: Yang Xu<xuyang2018.jy@fujitsu.com>
> ---
>   include/lapi/quotactl.h                       |  9 +++
>   .../kernel/syscalls/quotactl/quotactl01.c     | 79 +++++++++----------
>   .../syscalls/quotactl/quotactl_fmt_var.h      | 22 ++++++
>   3 files changed, 70 insertions(+), 40 deletions(-)
>   create mode 100644 testcases/kernel/syscalls/quotactl/quotactl_fmt_var.h
> 
> diff --git a/include/lapi/quotactl.h b/include/lapi/quotactl.h
> index c1ec9d6e1..8e0315d03 100644
> --- a/include/lapi/quotactl.h
> +++ b/include/lapi/quotactl.h
> @@ -8,6 +8,7 @@
>   #ifndef LAPI_QUOTACTL_H__
>   #define LAPI_QUOTACTL_H__
> 
> +#include "config.h"
>   #include<sys/quota.h>
> 
>   #ifdef HAVE_STRUCT_IF_NEXTDQBLK
> @@ -75,4 +76,12 @@ struct fs_quota_statv {
>   # define Q_GETNEXTQUOTA 0x800009 /* get disk limits and usage>= ID */
>   #endif
> 
> +#ifndef QFMT_VFS_V0
> +# define QFMT_VFS_V0 2
> +#endif
> +
> +#ifndef QFMT_VFS_V1
> +# define QFMT_VFS_V1 4
> +#endif
> +
>   #endif /* LAPI_QUOTACTL_H__ */
> diff --git a/testcases/kernel/syscalls/quotactl/quotactl01.c b/testcases/kernel/syscalls/quotactl/quotactl01.c
> index 56146b595..7a71dd5fc 100644
> --- a/testcases/kernel/syscalls/quotactl/quotactl01.c
> +++ b/testcases/kernel/syscalls/quotactl/quotactl01.c
> @@ -1,57 +1,47 @@
>   // SPDX-License-Identifier: GPL-2.0-or-later
>   /*
>    * Copyright (c) Crackerjack Project., 2007
> - * Copyright (c) 2016-2019 FUJITSU LIMITED. All rights reserved
> + * Copyright (c) 2016-2021 FUJITSU LIMITED. All rights reserved
>    * Author: Xiao Yang<yangx.jy@cn.fujitsu.com>
> + * Author: Yang Xu<xuyang2018.jy@fujitsu.com>
> + */
> +
> +/*\
> + * [Description]
> + * This testcases checks that quotactl(2) on ext4 filesystem succeeds to:
>    *
> - * This testcase checks the basic flag of quotactl(2) for non-XFS filesystems:
> - * 1) quotactl(2) succeeds to turn on quota with Q_QUOTAON flag for user.
> - * 2) quotactl(2) succeeds to set disk quota limits with Q_SETQUOTA flag
> - *    for user.
> - * 3) quotactl(2) succeeds to get disk quota limits with Q_GETQUOTA flag
> - *    for user.
> - * 4) quotactl(2) succeeds to set information about quotafile with Q_SETINFO
> - *    flag for user.
> - * 5) quotactl(2) succeeds to get information about quotafile with Q_GETINFO
> - *    flag for user.
> - * 6) quotactl(2) succeeds to get quota format with Q_GETFMT flag for user.
> - * 7) quotactl(2) succeeds to update quota usages with Q_SYNC flag for user.
> - * 8) quotactl(2) succeeds to get disk quota limit greater than or equal to
> - *    ID with Q_GETNEXTQUOTA flag for user.
> - * 9) quotactl(2) succeeds to turn off quota with Q_QUOTAOFF flag for user.
> - * 10) quotactl(2) succeeds to turn on quota with Q_QUOTAON flag for group.
> - * 11) quotactl(2) succeeds to set disk quota limits with Q_SETQUOTA flag
> - *     for group.
> - * 12) quotactl(2) succeeds to get disk quota limits with Q_GETQUOTA flag
> - *     for group.
> - * 13) quotactl(2) succeeds to set information about quotafile with Q_SETINFO
> - *     flag for group.
> - * 14) quotactl(2) succeeds to get information about quotafile with Q_GETINFO
> - *     flag for group.
> - * 15) quotactl(2) succeeds to get quota format with Q_GETFMT flag for group.
> - * 16) quotactl(2) succeeds to update quota usages with Q_SYNC flag for group.
> - * 17) quotactl(2) succeeds to get disk quota limit greater than or equal to
> - *     ID with Q_GETNEXTQUOTA flag for group.
> - * 18) quotactl(2) succeeds to turn off quota with Q_QUOTAOFF flag for group.
> + * - turn on quota with Q_QUOTAON flag for user
> + * - set disk quota limits with Q_SETQUOTA flag for user
> + * - get disk quota limits with Q_GETQUOTA flag for user
> + * - set information about quotafile with Q_SETINFO flag for user
> + * - get information about quotafile with Q_GETINFO flag for user
> + * - get quota format with Q_GETFMT flag for user
> + * - update quota usages with Q_SYNC flag for user
> + * - get disk quota limit greater than or equal to ID with Q_GETNEXTQUOTA flag for user
> + * - turn off quota with Q_QUOTAOFF flag for user
> + * - turn on quota with Q_QUOTAON flag for group
> + * - set disk quota limits with Q_SETQUOTA flag for group
> + * - get disk quota limits with Q_GETQUOTA flag for group
> + * - set information about quotafile with Q_SETINFO flag for group
> + * - get information about quotafile with Q_GETINFO flag for group
> + * - get quota format with Q_GETFMT flag for group
> + * - update quota usages with Q_SYNC flag for group
> + * - get disk quota limit greater than or equal to ID with Q_GETNEXTQUOTA flag for group
> + * - turn off quota with Q_QUOTAOFF flag for group
>    */
> 
> -#include "config.h"
>   #include<errno.h>
>   #include<string.h>
>   #include<unistd.h>
>   #include<stdio.h>
> -#include "lapi/quotactl.h"
>   #include "tst_test.h"
> +#include "quotactl_fmt_var.h"
> 
> -#ifndef QFMT_VFS_V0
> -# define QFMT_VFS_V0	2
> -#endif
>   #define USRPATH MNTPOINT "/aquota.user"
>   #define GRPPATH MNTPOINT "/aquota.group"
> -#define FMTID	QFMT_VFS_V0
>   #define MNTPOINT	"mntpoint"
> 
> -static int32_t fmt_id = FMTID;
> +static int32_t fmt_id;
>   static int test_id;
>   static char usrpath[] = USRPATH;
>   static char grppath[] = GRPPATH;
> @@ -163,11 +153,12 @@ static struct tcase {
> 
>   static void setup(void)
>   {
> -	const char *const cmd[] = {"quotacheck", "-ugF", "vfsv0", MNTPOINT, NULL};
> +	const char *const cmd[] = {"quotacheck", "-ugF", fmt_variants[tst_variant].fmt_name, MNTPOINT, NULL};
> 
> +	tst_res(TINFO, "quotactl() with %s format", fmt_variants[tst_variant].fmt_name);
>   	SAFE_CMD(cmd, NULL, NULL);
> +	fmt_id = fmt_variants[tst_variant].fmt_id;
> 
> -	test_id = geteuid();
>   	if (access(USRPATH, F_OK) == -1)
>   		tst_brk(TFAIL | TERRNO, "user quotafile didn't exist");
> 
> @@ -182,6 +173,12 @@ static void setup(void)
>   		getnextquota_nsup = 1;
>   }
> 
> +static void cleanup(void)
> +{
> +	SAFE_UNLINK(USRPATH);
> +	SAFE_UNLINK(GRPPATH);
> +}
> +
>   static void verify_quota(unsigned int n)
>   {
>   	struct tcase *tc =&tcases[n];
> @@ -223,12 +220,14 @@ static struct tst_test test = {
>   	.test = verify_quota,
>   	.tcnt = ARRAY_SIZE(tcases),
>   	.mount_device = 1,
> -	.dev_fs_type = "ext4",
>   	.mntpoint = MNTPOINT,
> +	.dev_fs_type = "ext4",
>   	.mnt_data = "usrquota,grpquota",
>   	.needs_cmds = (const char *const []) {
>   		"quotacheck",
>   		NULL
>   	},
>   	.setup = setup,
> +	.cleanup = cleanup,
> +	.test_variants = QUOTACTL_FMT_VARIANTS,
>   };
> diff --git a/testcases/kernel/syscalls/quotactl/quotactl_fmt_var.h b/testcases/kernel/syscalls/quotactl/quotactl_fmt_var.h
> new file mode 100644
> index 000000000..cb9fa4625
> --- /dev/null
> +++ b/testcases/kernel/syscalls/quotactl/quotactl_fmt_var.h
> @@ -0,0 +1,22 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2021 FUJITSU LIMITED. All rights reserved.
> + * Author: Yang Xu<xuyang2018.jy@fujitsu.com>
> + */
> +
> +#ifndef LTP_QUOTACTL_FMT_VAR_H
> +#define LTP_QUOTACTL_FMT_VAR_H
> +
> +#include "lapi/quotactl.h"
> +
> +#define QUOTACTL_FMT_VARIANTS 2
> +
> +static struct quotactl_fmt_variant {
> +	int32_t fmt_id;
> +	const char *fmt_name;
> +} fmt_variants[] = {
> +	{.fmt_id = QFMT_VFS_V0, .fmt_name = "vfsv0"},
> +	{.fmt_id = QFMT_VFS_V1, .fmt_name = "vfsv1"}
> +};
> +
> +#endif /* LAPI_QUOTACTL_FMT_VAR_H__ */


More information about the ltp mailing list