[PATCH v2 3/5] fanotify21: Simplify read_pidfd_fdinfo()
AnonymeMeow <[email protected]>
| Newsgroups | gmane.linux.ltp |
|---|---|
| Message-ID | <[email protected]> |
Let callers provide storage for struct pidfd_fdinfo_t instead of allocating it in read_pidfd_fdinfo() every time. This removes unnecessary allocation/free paths and the NULL checks after read_pidfd_fdinfo() and simplifies the code. Signed-off-by: AnonymeMeow <[email protected]> Reviewed-by: Jan Kara <[email protected]> Reviewed-by: Amir Goldstein <[email protected]> --- .../kernel/syscalls/fanotify/fanotify21.c | 61 ++++++------------- 1 file changed, 20 insertions(+), 41 deletions(-) diff --git a/testcases/kernel/syscalls/fanotify/fanotify21.c b/testcases/kernel/syscalls/fanotify/fanotify21.c index bd1a43513..22f9767db 100644 --- a/testcases/kernel/syscalls/fanotify/fanotify21.c +++ b/testcases/kernel/syscalls/fanotify/fanotify21.c @@ -64,7 +64,7 @@ static struct test_case_t { static int fanotify_fd; static char event_buf[BUF_SZ]; -static struct pidfd_fdinfo_t *self_pidfd_fdinfo; +static struct pidfd_fdinfo_t exp_pidfd_fdinfo; static int fd_error_unsupported; @@ -73,12 +73,9 @@ static struct tst_clone_args clone_args = { .exit_signal = SIGCHLD, }; -static struct pidfd_fdinfo_t *read_pidfd_fdinfo(int pidfd) +static void read_pidfd_fdinfo(int pidfd, struct pidfd_fdinfo_t *pidfd_fdinfo) { char *fdinfo_path; - struct pidfd_fdinfo_t *pidfd_fdinfo; - - pidfd_fdinfo = SAFE_MALLOC(sizeof(struct pidfd_fdinfo_t)); SAFE_ASPRINTF(&fdinfo_path, "/proc/self/fdinfo/%d", pidfd); SAFE_FILE_LINES_SCANF(fdinfo_path, "pos: %d", &pidfd_fdinfo->pos); @@ -88,8 +85,6 @@ static struct pidfd_fdinfo_t *read_pidfd_fdinfo(int pidfd) SAFE_FILE_LINES_SCANF(fdinfo_path, "NSpid: %d", &pidfd_fdinfo->ns_pid); free(fdinfo_path); - - return pidfd_fdinfo; } static void generate_event(void) @@ -133,12 +128,9 @@ static void do_setup(void) pidfd = SAFE_PIDFD_OPEN(getpid(), 0); - self_pidfd_fdinfo = read_pidfd_fdinfo(pidfd); - if (self_pidfd_fdinfo == NULL) { - tst_brk(TBROK, - "pidfd=%d, failed to read pidfd fdinfo", - pidfd); - } + read_pidfd_fdinfo(pidfd, &exp_pidfd_fdinfo); + + SAFE_CLOSE(pidfd); } static void do_test(unsigned int num) @@ -195,7 +187,7 @@ static void do_test(unsigned int num) while (i < len) { struct fanotify_event_metadata *event; struct fanotify_event_info_pidfd *info; - struct pidfd_fdinfo_t *event_pidfd_fdinfo = NULL; + struct pidfd_fdinfo_t event_pidfd_fdinfo; event = (struct fanotify_event_metadata *)&event_buf[i]; info = (struct fanotify_event_info_pidfd *)(event + 1); @@ -275,39 +267,32 @@ static void do_test(unsigned int num) * No pidfd errors occurred, continue with verifying pidfd * fdinfo validity. */ - event_pidfd_fdinfo = read_pidfd_fdinfo(info->pidfd); - if (event_pidfd_fdinfo == NULL) { - tst_brk(TBROK, - "reading fdinfo for pidfd: %d " - "describing pid: %u failed", - info->pidfd, - (unsigned int)event->pid); - goto next_event; - } else if (event_pidfd_fdinfo->pid != event->pid) { + read_pidfd_fdinfo(info->pidfd, &event_pidfd_fdinfo); + if (event_pidfd_fdinfo.pid != event->pid) { tst_res(TFAIL, "pidfd provided for incorrect pid " "(expected pidfd for pid: %u, got pidfd for " "pid: %u)", (unsigned int)event->pid, - (unsigned int)event_pidfd_fdinfo->pid); + (unsigned int)event_pidfd_fdinfo.pid); goto next_event; - } else if (memcmp(event_pidfd_fdinfo, self_pidfd_fdinfo, + } else if (memcmp(&event_pidfd_fdinfo, &exp_pidfd_fdinfo, sizeof(struct pidfd_fdinfo_t))) { tst_res(TFAIL, "pidfd fdinfo values for self and event differ " "(expected pos: %d, flags: %x, mnt_id: %d, " "pid: %d, ns_pid: %d, got pos: %d, " "flags: %x, mnt_id: %d, pid: %d, ns_pid: %d", - self_pidfd_fdinfo->pos, - self_pidfd_fdinfo->flags, - self_pidfd_fdinfo->mnt_id, - self_pidfd_fdinfo->pid, - self_pidfd_fdinfo->ns_pid, - event_pidfd_fdinfo->pos, - event_pidfd_fdinfo->flags, - event_pidfd_fdinfo->mnt_id, - event_pidfd_fdinfo->pid, - event_pidfd_fdinfo->ns_pid); + exp_pidfd_fdinfo.pos, + exp_pidfd_fdinfo.flags, + exp_pidfd_fdinfo.mnt_id, + exp_pidfd_fdinfo.pid, + exp_pidfd_fdinfo.ns_pid, + event_pidfd_fdinfo.pos, + event_pidfd_fdinfo.flags, + event_pidfd_fdinfo.mnt_id, + event_pidfd_fdinfo.pid, + event_pidfd_fdinfo.ns_pid); goto next_event; } else { tst_res(TPASS, @@ -329,9 +314,6 @@ next_event: if (info && info->pidfd >= 0) SAFE_CLOSE(info->pidfd); - - if (event_pidfd_fdinfo) - free(event_pidfd_fdinfo); } if (tc->want_pidfd_err) @@ -343,9 +325,6 @@ static void do_cleanup(void) if (fanotify_fd >= 0) SAFE_CLOSE(fanotify_fd); - if (self_pidfd_fdinfo) - free(self_pidfd_fdinfo); - /* Unmount the bind mount */ SAFE_UMOUNT(MOUNT_PATH); } -- 2.54.0 -- Mailing list info: https://lists.linux.it/listinfo/ltp