Skip to content

Commit

Permalink
Add cachestat04 test
Browse files Browse the repository at this point in the history
This test verifies cachestat() for all possible file descriptors,
checking that returned statistics are always zero, unless file
descriptor is unsupported and EBADF is raised.

Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
  • Loading branch information
acerv committed Jul 22, 2024
1 parent 343e192 commit 29bbd85
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 0 deletions.
1 change: 1 addition & 0 deletions runtest/syscalls
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ cacheflush01 cacheflush01
cachestat01 cachestat01
cachestat02 cachestat02
cachestat03 cachestat03
cachestat04 cachestat04

chdir01 chdir01
chdir01A symlink01 -T chdir01
Expand Down
1 change: 1 addition & 0 deletions testcases/kernel/syscalls/cachestat/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
cachestat01
cachestat02
cachestat03
cachestat04
58 changes: 58 additions & 0 deletions testcases/kernel/syscalls/cachestat/cachestat04.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2024 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
*/

/*\
* [Description]
*
* This test verifies cachestat() for all the possible file descriptors,
* checking that cache statistics are always zero, exept for unsupported file
* descriptors which cause EBADF to be raised.
*/

#include "tst_test.h"
#include "lapi/mman.h"

#define MNTPOINT "mnt"

static struct cachestat *cs;
static struct cachestat_range *cs_range;

static void check_cachestat(struct tst_fd *fd_in)
{
int ret;

ret = cachestat(fd_in->fd, cs_range, cs, 0);
if (ret == -1) {
TST_EXP_EQ_LI(errno, EBADF);
return;
}

TST_EXP_EQ_LI(cs->nr_cache, 0);
TST_EXP_EQ_LI(cs->nr_dirty, 0);
TST_EXP_EQ_LI(cs->nr_writeback, 0);
TST_EXP_EQ_LI(cs->nr_evicted, 0);
TST_EXP_EQ_LI(cs->nr_recently_evicted, 0);
}

static void run(void)
{
TST_FD_FOREACH(fd) {
tst_res(TINFO, "%s -> ...", tst_fd_desc(&fd));
check_cachestat(&fd);
}
}

static struct tst_test test = {
.test_all = run,
.min_kver = "6.5",
.mount_device = 1,
.mntpoint = MNTPOINT,
.bufs = (struct tst_buffers []) {
{&cs, .size = sizeof(struct cachestat)},
{&cs_range, .size = sizeof(struct cachestat_range)},
{}
},
};

0 comments on commit 29bbd85

Please sign in to comment.