[LTP] [PATCH v3 01/12] syscalls/quotactl01: Also test with vfsv1 format
Yang Xu
xuyang2018.jy@fujitsu.com
Tue Nov 9 11:52:36 CET 2021
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.
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com>
---
include/lapi/quotactl.h | 9 +++
.../kernel/syscalls/quotactl/quotactl01.c | 78 +++++++++----------
.../syscalls/quotactl/quotactl_fmt_var.h | 22 ++++++
3 files changed, 70 insertions(+), 39 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..1e0f5da70 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,13 @@ static struct tcase {
static void setup(void)
{
- const char *const cmd[] = {"quotacheck", "-ugF", "vfsv0", MNTPOINT, NULL};
+ const struct quotactl_fmt_variant *var = &fmt_variants[tst_variant];
+ const char *const cmd[] = {"quotacheck", "-ugF", var->fmt_name, MNTPOINT, NULL};
+ tst_res(TINFO, "quotactl() with %s format", var->fmt_name);
SAFE_CMD(cmd, NULL, NULL);
+ fmt_id = var->fmt_id;
- test_id = geteuid();
if (access(USRPATH, F_OK) == -1)
tst_brk(TFAIL | TERRNO, "user quotafile didn't exist");
@@ -182,6 +174,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];
@@ -231,4 +229,6 @@ static struct tst_test test = {
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__ */
--
2.23.0
More information about the ltp
mailing list