diff options
author | Amir Goldstein <amir73il@gmail.com> | 2024-01-24 16:23:30 +0200 |
---|---|---|
committer | Petr Vorel <pvorel@suse.cz> | 2024-01-24 21:41:50 +0100 |
commit | ea085713f0f1efd23814077c257f4caae4b8f9c4 (patch) | |
tree | d2ffc679fbac9cab052a2e711193c7bf8a87e73a | |
parent | 921f0ce869097daca035ed234f3fc351124585cc (diff) | |
download | ltp-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.c | 10 | ||||
-rw-r--r-- | testcases/kernel/syscalls/fanotify/fanotify15.c | 10 | ||||
-rw-r--r-- | testcases/kernel/syscalls/fanotify/fanotify16.c | 14 |
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); |