Skip to content

Commit

Permalink
syscalls/quotactl04: add mkfs.ext4 package version check
Browse files Browse the repository at this point in the history
The project quota feature was added in e2fsprogs 1.43 [1]:
  E2fsprogs 1.43 (May 17, 2016)
    Add support for the ext4 metadata checksum, checksum seed, inline
    data, encryption, project quota, and read-only features.

The test should be skipped when running with older package, otherwise
it will fail with:
  Invalid filesystem option set: quota,project

Use popen and fscanf to get mkfs.ext4 -V output for version
comparison. This version checking by adding digits together does not
work with alphabets in the number like rc1, but in that case the test
will still be tested.

It will now be skipped with (tested with Ubuntu Xenial + 4.15 kernel):
  quotactl04.c:118: TCONF: Test needs mkfs.ext4 >= 1.43 for quota,project
  option, test skipped

[1] http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.42.13

Signed-off-by: Po-Hsu Lin <[email protected]>
Reviewed-by: Yang Xu <[email protected]>
Reviewed-by: Petr Vorel <[email protected]>
  • Loading branch information
Cypresslin authored and pevik committed Nov 4, 2020
1 parent 4706bf2 commit 123e6db
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions testcases/kernel/syscalls/quotactl/quotactl04.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
* 7) quotactl(2) succeeds to get disk quota limit greater than or equal to
* ID with Q_GETNEXTQUOTA flag for project.
* 8) quotactl(2) succeeds to turn off quota with Q_QUOTAOFF flag for project.
*
* Minimum e2fsprogs version required is 1.43.
*/

#include <errno.h>
Expand All @@ -28,6 +30,7 @@
#include <sys/stat.h>
#include "config.h"
#include "lapi/quotactl.h"
#include "tst_safe_stdio.h"
#include "tst_test.h"

#ifndef QFMT_VFS_V1
Expand Down Expand Up @@ -102,9 +105,18 @@ static struct tcase {

static void setup(void)
{
FILE *f;
const char *const fs_opts[] = {"-I 256", "-O quota,project", NULL};
int rc, major, minor, patch;

test_id = geteuid();
f = SAFE_POPEN("mkfs.ext4 -V 2>&1", "r");
rc = fscanf(f, "mke2fs %d.%d.%d", &major, &minor, &patch);
if (rc != 3)
tst_res(TWARN, "Unable parse version number");
else if (major * 10000 + minor * 100 + patch < 14300)
tst_brk(TCONF, "Test needs mkfs.ext4 >= 1.43 for quota,project option, test skipped");
pclose(f);
SAFE_MKFS(tst_device->dev, tst_device->fs_type, fs_opts, NULL);
SAFE_MOUNT(tst_device->dev, MNTPOINT, tst_device->fs_type, 0, "quota");
mount_flag = 1;
Expand Down

0 comments on commit 123e6db

Please sign in to comment.