Add a tracepoint so we can see exactly how this is being called.
Showing the changes to include/trace (2 of 3 files). Show all
Unified · Split
| @@ -0,0 +1,51 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | ||
| 2 | #undef TRACE_SYSTEM | ||
| 3 | #define TRACE_SYSTEM fsnotify | ||
| 4 | |||
| 5 | #if !defined(_TRACE_FSNOTIFY_H) || defined(TRACE_HEADER_MULTI_READ) | ||
| 6 | #define _TRACE_FSNOTIFY_H | ||
| 7 | |||
| 8 | #include <linux/tracepoint.h> | ||
| 9 | |||
| 10 | #include <trace/misc/fsnotify.h> | ||
| 11 | |||
| 12 | TRACE_EVENT(fsnotify, | ||
| 13 | TP_PROTO(__u32 mask, const void *data, int data_type, | ||
| 14 | struct inode *dir, const struct qstr *file_name, | ||
| 15 | struct inode *inode, u32 cookie), | ||
| 16 | |||
| 17 | TP_ARGS(mask, data, data_type, dir, file_name, inode, cookie), | ||
| 18 | |||
| 19 | TP_STRUCT__entry( | ||
| 20 | __field(__u32, mask) | ||
| 21 | __field(unsigned long, dir_ino) | ||
| 22 | __field(unsigned long, ino) | ||
| 23 | __field(dev_t, s_dev) | ||
| 24 | __field(int, data_type) | ||
| 25 | __field(u32, cookie) | ||
| 26 | __string(file_name, file_name ? (const char *)file_name->name : "") | ||
| 27 | ), | ||
| 28 | |||
| 29 | TP_fast_assign( | ||
| 30 | __entry->mask = mask; | ||
| 31 | __entry->dir_ino = dir ? dir->i_ino : 0; | ||
| 32 | __entry->ino = inode ? inode->i_ino : 0; | ||
| 33 | __entry->s_dev = dir ? dir->i_sb->s_dev : | ||
| 34 | inode ? inode->i_sb->s_dev : 0; | ||
| 35 | __entry->data_type = data_type; | ||
| 36 | __entry->cookie = cookie; | ||
| 37 | __assign_str(file_name); | ||
| 38 | ), | ||
| 39 | |||
| 40 | TP_printk("dev=%d:%d dir=%lu ino=%lu data_type=%d cookie=0x%x mask=0x%x %s name=%s", | ||
| 41 | MAJOR(__entry->s_dev), MINOR(__entry->s_dev), | ||
| 42 | __entry->dir_ino, __entry->ino, | ||
| 43 | __entry->data_type, __entry->cookie, | ||
| 44 | __entry->mask, show_fsnotify_mask(__entry->mask), | ||
| 45 | __get_str(file_name)) | ||
| 46 | ); | ||
| 47 | |||
| 48 | #endif /* _TRACE_FSNOTIFY_H */ | ||
| 49 | |||
| 50 | /* This part must be outside protection */ | ||
| 51 | #include <trace/define_trace.h> | ||
| @@ -0,0 +1,35 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | ||
| 2 | /* | ||
| 3 | * Display helpers for fsnotify events | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include <linux/fsnotify_backend.h> | ||
| 7 | |||
| 8 | #define show_fsnotify_mask(mask) \ | ||
| 9 | __print_flags(mask, "|", \ | ||
| 10 | { FS_ACCESS, "ACCESS" }, \ | ||
| 11 | { FS_MODIFY, "MODIFY" }, \ | ||
| 12 | { FS_ATTRIB, "ATTRIB" }, \ | ||
| 13 | { FS_CLOSE_WRITE, "CLOSE_WRITE" }, \ | ||
| 14 | { FS_CLOSE_NOWRITE, "CLOSE_NOWRITE" }, \ | ||
| 15 | { FS_OPEN, "OPEN" }, \ | ||
| 16 | { FS_MOVED_FROM, "MOVED_FROM" }, \ | ||
| 17 | { FS_MOVED_TO, "MOVED_TO" }, \ | ||
| 18 | { FS_CREATE, "CREATE" }, \ | ||
| 19 | { FS_DELETE, "DELETE" }, \ | ||
| 20 | { FS_DELETE_SELF, "DELETE_SELF" }, \ | ||
| 21 | { FS_MOVE_SELF, "MOVE_SELF" }, \ | ||
| 22 | { FS_OPEN_EXEC, "OPEN_EXEC" }, \ | ||
| 23 | { FS_UNMOUNT, "UNMOUNT" }, \ | ||
| 24 | { FS_Q_OVERFLOW, "Q_OVERFLOW" }, \ | ||
| 25 | { FS_ERROR, "ERROR" }, \ | ||
| 26 | { FS_OPEN_PERM, "OPEN_PERM" }, \ | ||
| 27 | { FS_ACCESS_PERM, "ACCESS_PERM" }, \ | ||
| 28 | { FS_OPEN_EXEC_PERM, "OPEN_EXEC_PERM" }, \ | ||
| 29 | { FS_PRE_ACCESS, "PRE_ACCESS" }, \ | ||
| 30 | { FS_MNT_ATTACH, "MNT_ATTACH" }, \ | ||
| 31 | { FS_MNT_DETACH, "MNT_DETACH" }, \ | ||
| 32 | { FS_EVENT_ON_CHILD, "EVENT_ON_CHILD" }, \ | ||
| 33 | { FS_RENAME, "RENAME" }, \ | ||
| 34 | { FS_DN_MULTISHOT, "DN_MULTISHOT" }, \ | ||
| 35 | { FS_ISDIR, "ISDIR" }) | ||