Lines Matching +full:mount +full:- +full:observe
1 // SPDX-License-Identifier: GPL-2.0-or-later
13 * - FAN_REPORT_DFID_NAME (dir fid + name)
14 * - FAN_REPORT_DIR_FID (dir fid)
15 * - FAN_REPORT_DIR_FID | FAN_REPORT_FID (dir fid + child fid)
16 * - FAN_REPORT_DFID_NAME | FAN_REPORT_FID (dir fid + name + child fid)
17 * - FAN_REPORT_DFID_NAME_TARGET (dir fid + name + created/deleted file fid)
28 #include <sys/mount.h>
89 /* Mount watch for events possible on children */
90 INIT_FANOTIFY_MARK_TYPE(MOUNT),
110 /* Mount watch for events possible on children */
111 INIT_FANOTIFY_MARK_TYPE(MOUNT),
131 /* Mount watch for events possible on children */
132 INIT_FANOTIFY_MARK_TYPE(MOUNT),
152 /* Mount watch for events possible on children */
153 INIT_FANOTIFY_MARK_TYPE(MOUNT),
173 /* Mount watch for events possible on children */
174 INIT_FANOTIFY_MARK_TYPE(MOUNT),
194 /* Mount watch for events possible on children */
195 INIT_FANOTIFY_MARK_TYPE(MOUNT),
215 /* Mount watch for events possible on children */
216 INIT_FANOTIFY_MARK_TYPE(MOUNT),
248 /* Mount watch for events possible on children */
249 INIT_FANOTIFY_MARK_TYPE(MOUNT),
260 struct fanotify_group_type *group = &tc->group; in do_test()
261 struct fanotify_mark_type *mark = &tc->mark; in do_test()
262 struct fanotify_mark_type *sub_mark = &tc->sub_mark; in do_test()
265 int report_name = (group->flag & FAN_REPORT_NAME); in do_test()
266 int report_target_fid = (group->flag & FAN_REPORT_TARGET_FID); in do_test()
267 int report_rename = (tc->mask & FAN_RENAME); in do_test()
268 int fs_mark = (mark->flag == FAN_MARK_FILESYSTEM); in do_test()
269 int rename_ignored = (tc->tmpdir_ignored_mask & FAN_RENAME); in do_test()
271 tst_res(TINFO, "Test #%d: %s", number, tc->tname); in do_test()
284 fd_notify = SAFE_FANOTIFY_INIT(group->flag, 0); in do_test()
289 SAFE_FANOTIFY_MARK(fd_notify, FAN_MARK_ADD | mark->flag, tc->mask, in do_test()
292 /* Save the mount root fid */ in do_test()
297 * Make it a mount root. in do_test()
308 if (tc->sub_mask) in do_test()
309 SAFE_FANOTIFY_MARK(fd_notify, FAN_MARK_ADD | sub_mark->flag, in do_test()
310 tc->sub_mask, AT_FDCWD, dname1); in do_test()
317 if (tc->tmpdir_ignored_mask) in do_test()
321 tc->tmpdir_ignored_mask, AT_FDCWD, TEMP_DIR); in do_test()
348 len += SAFE_READ(0, fd_notify, event_buf + len, EVENT_BUF_LEN - len); in do_test()
359 * Event on non-dir child with the same name may be merged with the in do_test()
415 if (fs_mark && (group->flag & FAN_REPORT_FID)) { in do_test()
460 * will observe the same MOVED_FROM/MOVED_TO events as a direct rename, in do_test()
461 * but will observe 2 FAN_RENAME events with 1 info dir+name record each in do_test()
476 len += SAFE_READ(0, fd_notify, event_buf + len, EVENT_BUF_LEN - len); in do_test()
523 fd_notify = -1; in do_test()
530 struct fanotify_fid_t *expected_fid = expected->fid; in do_test()
531 struct fanotify_fid_t *expected_child_fid = expected->child_fid; in do_test()
539 file_handle = (struct file_handle *)event_fid->handle; in do_test()
540 fhlen = file_handle->handle_bytes; in do_test()
541 filename = (char *)file_handle->f_handle + fhlen; in do_test()
542 child_fid = (void *)((char *)event_fid + event_fid->hdr.len); in do_test()
543 namelen = (char *)child_fid - (char *)filename; in do_test()
552 if (((char *)child_fid - (char *)event) >= event->event_len) in do_test()
555 if (!(group->flag & FAN_REPORT_FID)) in do_test()
559 expected->name[0] = 0; in do_test()
561 if (expected->mask & FAN_RENAME) { in do_test()
563 info_type = expected->old_name ? in do_test()
567 if (expected->name2[0]) in do_test()
569 } else if (expected->name[0]) { in do_test()
571 } else if (expected->mask & FAN_ONDIR) { in do_test()
573 } else if (expected->mask & (FAN_DELETE_SELF | FAN_MOVE_SELF)) { in do_test()
574 /* Self event on non-dir has only child fid */ in do_test()
586 mask_match = ((event->mask & expected->mask) && in do_test()
587 !(expected->mask & ~event->mask) && in do_test()
588 !((event->mask ^ expected->mask) & FAN_ONDIR)); in do_test()
596 (unsigned long long)event->mask, in do_test()
597 (unsigned int)event->pid, event->fd, filename, in do_test()
598 event->event_len, event_fid->hdr.info_type, in do_test()
599 event_fid->hdr.len, fhlen); in do_test()
604 (unsigned long long)event->mask, in do_test()
605 (unsigned int)event->pid, event->fd, in do_test()
606 event->event_len, event_fid->hdr.info_type, in do_test()
607 event_fid->hdr.len, fhlen); in do_test()
613 (unsigned long long)event->mask, expected->mask, in do_test()
614 (unsigned int)event->pid, event->fd, filename, in do_test()
615 event->event_len, event_fid->hdr.info_type, in do_test()
616 event_fid->hdr.len, fhlen); in do_test()
617 } else if (info_type != event_fid->hdr.info_type) { in do_test()
621 (unsigned long long)event->mask, in do_test()
622 (unsigned int)event->pid, event->fd, in do_test()
623 event->event_len, event_fid->hdr.info_type, in do_test()
624 info_type, event_fid->hdr.len, fhlen); in do_test()
625 } else if (fhlen != expected_fid->handle.handle_bytes) { in do_test()
630 (unsigned long long)event->mask, in do_test()
631 (unsigned int)event->pid, event->fd, filename, in do_test()
632 event->event_len, info_type, in do_test()
633 event_fid->hdr.len, fhlen, in do_test()
634 expected_fid->handle.handle_bytes, in do_test()
635 file_handle->handle_type); in do_test()
636 } else if (file_handle->handle_type != in do_test()
637 expected_fid->handle.handle_type) { in do_test()
642 (unsigned long long)event->mask, in do_test()
643 (unsigned int)event->pid, event->fd, filename, in do_test()
644 event->event_len, info_type, in do_test()
645 event_fid->hdr.len, fhlen, in do_test()
646 file_handle->handle_type, in do_test()
647 expected_fid->handle.handle_type); in do_test()
648 } else if (memcmp(file_handle->f_handle, in do_test()
649 expected_fid->handle.f_handle, fhlen)) { in do_test()
654 (unsigned long long)event->mask, in do_test()
655 (unsigned int)event->pid, event->fd, filename, in do_test()
656 event->event_len, info_type, in do_test()
657 event_fid->hdr.len, fhlen, in do_test()
658 file_handle->handle_type, in do_test()
659 *(int *)(file_handle->f_handle)); in do_test()
660 } else if (memcmp(&event_fid->fsid, &expected_fid->fsid, in do_test()
661 sizeof(event_fid->fsid)) != 0) { in do_test()
666 (unsigned long long)event->mask, in do_test()
667 (unsigned int)event->pid, event->fd, filename, in do_test()
668 event->event_len, info_type, in do_test()
669 event_fid->hdr.len, fhlen, in do_test()
670 FSID_VAL_MEMBER(event_fid->fsid, 0), in do_test()
671 FSID_VAL_MEMBER(event_fid->fsid, 1), in do_test()
672 expected_fid->fsid.val[0], in do_test()
673 expected_fid->fsid.val[1]); in do_test()
674 } else if (strcmp(expected->name, filename)) { in do_test()
679 (unsigned long long)event->mask, in do_test()
680 (unsigned int)event->pid, event->fd, in do_test()
681 filename, expected->name, in do_test()
682 event->event_len, event_fid->hdr.info_type, in do_test()
683 event_fid->hdr.len, fhlen); in do_test()
684 } else if (event->pid != getpid()) { in do_test()
689 (unsigned long long)event->mask, in do_test()
690 (unsigned int)event->pid, in do_test()
692 event->fd, filename, in do_test()
693 event->event_len, event_fid->hdr.info_type, in do_test()
694 event_fid->hdr.len, fhlen); in do_test()
700 (unsigned long long)event->mask, in do_test()
701 (unsigned int)event->pid, event->fd, in do_test()
703 event->event_len, event_fid->hdr.info_type, in do_test()
704 event_fid->hdr.len, fhlen); in do_test()
708 test_num, info_id, event_fid->hdr.info_type, in do_test()
709 event_fid->hdr.len, fhlen); in do_test()
713 expected_fid = expected->child_fid; in do_test()
722 if (event->mask & FAN_RENAME && expected->name2[0]) { in do_test()
724 expected_fid = expected->fid; in do_test()
726 file_handle = (struct file_handle *)event_fid->handle; in do_test()
727 fhlen = file_handle->handle_bytes; in do_test()
735 test_num, (unsigned long long)event->mask, in do_test()
736 (unsigned int)event->pid, event->fd, filename, in do_test()
737 event->event_len, info_id, event_fid->hdr.info_type, in do_test()
738 event_fid->hdr.len, fhlen); in do_test()
746 event->mask &= ~expected->mask | FAN_ONDIR; in do_test()
747 if (event->mask & ~FAN_ONDIR) in do_test()
751 i += event->event_len; in do_test()
752 if (event->fd > 0) in do_test()
753 SAFE_CLOSE(event->fd); in do_test()