From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kara Date: Mon, 7 Dec 2020 11:48:16 +0100 Subject: [LTP] [PATCH 1/5] syscalls/fanotify: Generalize check for FAN_REPORT_FID support In-Reply-To: <20201204095930.866421-2-amir73il@gmail.com> References: <20201204095930.866421-1-amir73il@gmail.com> <20201204095930.866421-2-amir73il@gmail.com> Message-ID: <20201207104816.GC28106@quack2.suse.cz> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ltp@lists.linux.it On Fri 04-12-20 11:59:26, Amir Goldstein wrote: > Generalize the helpers to be able to check any fanotify_init() flags > and pass FAN_REPORT_FID as argument in call sites. > > Add helper fanotify_init_flags_supported_by_kernel() to check for > kernel support for fanotify_init flags without checking fs support > for those flags. > > Signed-off-by: Amir Goldstein Looks good to me. You can add: Reviewed-by: Jan Kara Honza > --- > testcases/kernel/syscalls/fanotify/fanotify.h | 46 ++++++++++++------- > .../kernel/syscalls/fanotify/fanotify01.c | 4 +- > .../kernel/syscalls/fanotify/fanotify13.c | 2 +- > .../kernel/syscalls/fanotify/fanotify15.c | 2 +- > .../kernel/syscalls/fanotify/fanotify16.c | 2 +- > 5 files changed, 34 insertions(+), 22 deletions(-) > > diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h > index 82e03db26..8907db052 100644 > --- a/testcases/kernel/syscalls/fanotify/fanotify.h > +++ b/testcases/kernel/syscalls/fanotify/fanotify.h > @@ -286,15 +286,15 @@ static inline int fanotify_events_supported_by_kernel(uint64_t mask) > > /* > * @return 0: fanotify supported both in kernel and on tested filesystem > - * @return -1: FAN_REPORT_FID not supported in kernel > - * @return -2: FAN_REPORT_FID not supported on tested filesystem > + * @return -1: @flags not supported in kernel > + * @return -2: @flags not supported on tested filesystem (tested if @fname is not NULL) > */ > -static inline int fanotify_fan_report_fid_supported_on_fs(const char *fname) > +static inline int fanotify_init_flags_supported_on_fs(unsigned int flags, const char *fname) > { > int fd; > int rval = 0; > > - fd = fanotify_init(FAN_CLASS_NOTIF | FAN_REPORT_FID, O_RDONLY); > + fd = fanotify_init(flags, O_RDONLY); > > if (fd < 0) { > if (errno == ENOSYS) > @@ -306,7 +306,7 @@ static inline int fanotify_fan_report_fid_supported_on_fs(const char *fname) > tst_brk(TBROK | TERRNO, "fanotify_init() failed"); > } > > - if (fanotify_mark(fd, FAN_MARK_ADD, FAN_ACCESS, AT_FDCWD, fname) < 0) { > + if (fname && fanotify_mark(fd, FAN_MARK_ADD, FAN_ACCESS, AT_FDCWD, fname) < 0) { > if (errno == ENODEV || errno == EOPNOTSUPP || errno == EXDEV) { > rval = -2; > } else { > @@ -321,20 +321,32 @@ static inline int fanotify_fan_report_fid_supported_on_fs(const char *fname) > return rval; > } > > -#define FANOTIFY_FAN_REPORT_FID_ERR_MSG_(res_func, fail) do { \ > - if (fail == -1) \ > - res_func(TCONF, "FAN_REPORT_FID not supported in kernel?"); \ > - if (fail == -2) \ > - res_func(TCONF, "FAN_REPORT_FID not supported on %s filesystem", \ > - tst_device->fs_type); \ > - } while (0) > +static inline int fanotify_init_flags_supported_by_kernel(unsigned int flags) > +{ > + return fanotify_init_flags_supported_on_fs(flags, NULL); > +} > + > +typedef void (*tst_res_func_t)(const char *file, const int lineno, > + int ttype, const char *fmt, ...); > + > +static inline void fanotify_init_flags_err_msg(const char *flags_str, > + const char *file, const int lineno, tst_res_func_t res_func, int fail) > +{ > + if (fail == -1) > + res_func(file, lineno, TCONF, > + "%s not supported in kernel?", flags_str); > + if (fail == -2) > + res_func(file, lineno, TCONF, > + "%s not supported on %s filesystem", > + flags_str, tst_device->fs_type); > +} > > -#define FANOTIFY_FAN_REPORT_FID_ERR_MSG(fail) \ > - FANOTIFY_FAN_REPORT_FID_ERR_MSG_(tst_res, (fail)) > +#define FANOTIFY_INIT_FLAGS_ERR_MSG(flags, fail) \ > + fanotify_init_flags_err_msg(#flags, __FILE__, __LINE__, tst_res_, (fail)) > > -#define REQUIRE_FANOTIFY_FAN_REPORT_FID_SUPPORTED_ON_FS(fname) do { \ > - FANOTIFY_FAN_REPORT_FID_ERR_MSG_(tst_brk, \ > - fanotify_fan_report_fid_supported_on_fs(fname)); \ > +#define REQUIRE_FANOTIFY_INIT_FLAGS_SUPPORTED_ON_FS(flags, fname) do { \ > + fanotify_init_flags_err_msg(#flags, __FILE__, __LINE__, tst_brk_, \ > + fanotify_init_flags_supported_on_fs(flags, fname)); \ > } while (0) > > static inline int fanotify_mark_supported_by_kernel(uint64_t flag) > diff --git a/testcases/kernel/syscalls/fanotify/fanotify01.c b/testcases/kernel/syscalls/fanotify/fanotify01.c > index d6d72dad9..cdb01730f 100644 > --- a/testcases/kernel/syscalls/fanotify/fanotify01.c > +++ b/testcases/kernel/syscalls/fanotify/fanotify01.c > @@ -90,7 +90,7 @@ static void test_fanotify(unsigned int n) > tst_res(TINFO, "Test #%d: %s", n, tc->tname); > > if (fan_report_fid_unsupported && (tc->init_flags & FAN_REPORT_FID)) { > - FANOTIFY_FAN_REPORT_FID_ERR_MSG(fan_report_fid_unsupported); > + FANOTIFY_INIT_FLAGS_ERR_MSG(FAN_REPORT_FID, fan_report_fid_unsupported); > return; > } > > @@ -334,7 +334,7 @@ static void setup(void) > sprintf(fname, MOUNT_PATH"/tfile_%d", getpid()); > SAFE_FILE_PRINTF(fname, "1"); > > - fan_report_fid_unsupported = fanotify_fan_report_fid_supported_on_fs(fname); > + fan_report_fid_unsupported = fanotify_init_flags_supported_on_fs(FAN_REPORT_FID, fname); > filesystem_mark_unsupported = fanotify_mark_supported_by_kernel(FAN_MARK_FILESYSTEM); > } > > diff --git a/testcases/kernel/syscalls/fanotify/fanotify13.c b/testcases/kernel/syscalls/fanotify/fanotify13.c > index a402cdb13..c9cf10555 100644 > --- a/testcases/kernel/syscalls/fanotify/fanotify13.c > +++ b/testcases/kernel/syscalls/fanotify/fanotify13.c > @@ -256,7 +256,7 @@ out: > > static void do_setup(void) > { > - REQUIRE_FANOTIFY_FAN_REPORT_FID_SUPPORTED_ON_FS(MOUNT_PATH); > + REQUIRE_FANOTIFY_INIT_FLAGS_SUPPORTED_ON_FS(FAN_REPORT_FID, MOUNT_PATH); > > filesystem_mark_unsupported = fanotify_mark_supported_by_kernel(FAN_MARK_FILESYSTEM); > > diff --git a/testcases/kernel/syscalls/fanotify/fanotify15.c b/testcases/kernel/syscalls/fanotify/fanotify15.c > index 9e3748bc2..ba8259c7c 100644 > --- a/testcases/kernel/syscalls/fanotify/fanotify15.c > +++ b/testcases/kernel/syscalls/fanotify/fanotify15.c > @@ -270,7 +270,7 @@ static void do_test(unsigned int number) > static void do_setup(void) > { > SAFE_MKDIR(TEST_DIR, 0755); > - REQUIRE_FANOTIFY_FAN_REPORT_FID_SUPPORTED_ON_FS(TEST_DIR); > + REQUIRE_FANOTIFY_INIT_FLAGS_SUPPORTED_ON_FS(FAN_REPORT_FID, TEST_DIR); > 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 a554c7d39..a4409df14 100644 > --- a/testcases/kernel/syscalls/fanotify/fanotify16.c > +++ b/testcases/kernel/syscalls/fanotify/fanotify16.c > @@ -551,7 +551,7 @@ check_match: > > static void setup(void) > { > - REQUIRE_FANOTIFY_FAN_REPORT_FID_SUPPORTED_ON_FS(MOUNT_PATH); > + REQUIRE_FANOTIFY_INIT_FLAGS_SUPPORTED_ON_FS(FAN_REPORT_FID, MOUNT_PATH); > > sprintf(dname1, "%s/%s", MOUNT_PATH, DIR_NAME1); > sprintf(dname2, "%s/%s", MOUNT_PATH, DIR_NAME2); > -- > 2.25.1 > -- Jan Kara SUSE Labs, CR