aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmir Goldstein <amir73il@gmail.com>2024-01-24 16:23:30 +0200
committerPetr Vorel <pvorel@suse.cz>2024-01-24 21:41:50 +0100
commitea085713f0f1efd23814077c257f4caae4b8f9c4 (patch)
treed2ffc679fbac9cab052a2e711193c7bf8a87e73a
parent921f0ce869097daca035ed234f3fc351124585cc (diff)
downloadltp-ea085713f0f1efd23814077c257f4caae4b8f9c4.tar.gz
fanotify{14,15,16}: Check for filesystem mark support on filesystem
There are now filesystems other than overlayfs (e.g. fuse) that do not support filesystem and mount marks with FAN_REPORT_FID. Adapt tests to runs correctly on those filesystems (tested with ntfs-3g). Reviewed-by: Petr Vorel <pvorel@suse.cz> Reviewed-by: Petr Vorel <pvorel@suse.cz> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
-rw-r--r--testcases/kernel/syscalls/fanotify/fanotify14.c10
-rw-r--r--testcases/kernel/syscalls/fanotify/fanotify15.c10
-rw-r--r--testcases/kernel/syscalls/fanotify/fanotify16.c14
3 files changed, 30 insertions, 4 deletions
diff --git a/testcases/kernel/syscalls/fanotify/fanotify14.c b/testcases/kernel/syscalls/fanotify/fanotify14.c
index 0e24e0335..0b0da89ca 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify14.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify14.c
@@ -46,6 +46,7 @@
static int pipes[2] = {-1, -1};
static int fanotify_fd;
static int ignore_mark_unsupported;
+static int filesystem_mark_unsupported;
static unsigned int supported_init_flags;
struct test_case_flags_t {
@@ -299,7 +300,7 @@ static void do_test(unsigned int number)
"Adding an inode mark on directory did not fail with "
"ENOTDIR error as on non-dir inode");
- if (!(tc->mark.flags & FAN_MARK_ONLYDIR)) {
+ if (!(tc->mark.flags & FAN_MARK_ONLYDIR) && !filesystem_mark_unsupported) {
SAFE_FANOTIFY_MARK(fanotify_fd, FAN_MARK_ADD | tc->mark.flags |
FAN_MARK_FILESYSTEM, tc->mask.flags,
AT_FDCWD, FILE1);
@@ -321,12 +322,13 @@ static void do_setup(void)
/* Require FAN_REPORT_FID support for all tests to simplify per test case requirements */
REQUIRE_FANOTIFY_INIT_FLAGS_SUPPORTED_ON_FS(FAN_REPORT_FID, MNTPOINT);
-
- supported_init_flags = fanotify_get_supported_init_flags(all_init_flags,
- MNTPOINT);
+ supported_init_flags = fanotify_get_supported_init_flags(all_init_flags, MNTPOINT);
ignore_mark_unsupported = fanotify_mark_supported_on_fs(FAN_MARK_IGNORE_SURV,
MNTPOINT);
+ filesystem_mark_unsupported =
+ fanotify_flags_supported_on_fs(FAN_REPORT_FID, FAN_MARK_FILESYSTEM, FAN_OPEN,
+ MNTPOINT);
/* Create temporary test file to place marks on */
SAFE_FILE_PRINTF(FILE1, "0");
diff --git a/testcases/kernel/syscalls/fanotify/fanotify15.c b/testcases/kernel/syscalls/fanotify/fanotify15.c
index 6109d32cd..bacf05049 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify15.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify15.c
@@ -52,6 +52,7 @@ struct event_t {
};
static int fanotify_fd;
+static int filesystem_mark_unsupported;
static char events_buf[EVENT_BUF_LEN];
static struct event_t event_set[EVENT_MAX];
@@ -85,6 +86,11 @@ static void do_test(unsigned int number)
tst_res(TINFO, "Test #%d: %s", number, tc->tname);
+ if (filesystem_mark_unsupported && mark->flag != FAN_MARK_INODE) {
+ FANOTIFY_MARK_FLAGS_ERR_MSG(mark, filesystem_mark_unsupported);
+ return;
+ }
+
SAFE_FANOTIFY_MARK(fanotify_fd, FAN_MARK_ADD | mark->flag, tc->mask |
FAN_CREATE | FAN_DELETE | FAN_MOVE |
FAN_MODIFY | FAN_ONDIR,
@@ -274,6 +280,10 @@ static void do_setup(void)
{
SAFE_MKDIR(TEST_DIR, 0755);
REQUIRE_FANOTIFY_INIT_FLAGS_SUPPORTED_ON_FS(FAN_REPORT_FID, TEST_DIR);
+ filesystem_mark_unsupported =
+ fanotify_flags_supported_on_fs(FAN_REPORT_FID, FAN_MARK_FILESYSTEM, FAN_OPEN,
+ MOUNT_POINT);
+
fanotify_fd = SAFE_FANOTIFY_INIT(FAN_REPORT_FID, O_RDONLY);
}
diff --git a/testcases/kernel/syscalls/fanotify/fanotify16.c b/testcases/kernel/syscalls/fanotify/fanotify16.c
index dfa4edf03..2cc56b5bd 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify16.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify16.c
@@ -70,6 +70,7 @@ static char event_buf[EVENT_BUF_LEN];
#define TEMP_DIR MOUNT_PATH "/temp_dir"
static int fan_report_target_fid_unsupported;
+static int filesystem_mark_unsupported;
static int rename_events_unsupported;
static struct test_case_t {
@@ -281,6 +282,16 @@ static void do_test(unsigned int number)
return;
}
+ if (filesystem_mark_unsupported) {
+ if (sub_mark && sub_mark->flag != FAN_MARK_INODE)
+ mark = sub_mark;
+
+ if (mark->flag != FAN_MARK_INODE) {
+ FANOTIFY_MARK_FLAGS_ERR_MSG(mark, filesystem_mark_unsupported);
+ return;
+ }
+ }
+
fd_notify = SAFE_FANOTIFY_INIT(group->flag, 0);
/*
@@ -765,6 +776,9 @@ static void setup(void)
REQUIRE_FANOTIFY_INIT_FLAGS_SUPPORTED_ON_FS(FAN_REPORT_DIR_FID, MOUNT_PATH);
fan_report_target_fid_unsupported =
fanotify_init_flags_supported_on_fs(FAN_REPORT_DFID_NAME_TARGET, MOUNT_PATH);
+ filesystem_mark_unsupported =
+ fanotify_flags_supported_on_fs(FAN_REPORT_FID, FAN_MARK_FILESYSTEM, FAN_OPEN,
+ MOUNT_PATH);
rename_events_unsupported =
fanotify_flags_supported_on_fs(FAN_REPORT_DFID_NAME, 0,
FAN_RENAME, MOUNT_PATH);