Jan, This is the 4th revision of patch series to add support for filesystem change monitoring to fanotify. It incorporates the changes you requested in review of v3 FAN_REPORT_FID patches. The complete work is available on fanotify_dirent branch [1] on my tree. The combined functionality of FAN_MARK_FILESYSTEM, FAN_REPORT_FID and dirent modification events is demonstrated with a prototype of global filesystem monitor based on inotify-tools [2]. In your review of v3 patched you only got as far as patch v3 9/13. Because this patch marks the end of the FAN_REPORT_FID sub series, I found it best to re-post the entire series with the changes you requested thus far. For convenience of review, I pushed branches fanotify_fid-v3 [3] and fanotify_fid-v4 [4] with the work you reviewed so far and its re-worked version. One thing that we discussed and I did NOT do is move struct file_handle to uapi headers. This got complicated due to existing definitions in glibc header files and I realized we could do without it. I have added the vfs_get_fsid() helper as you requested, but since it wasn't required by the patch set, I added it as two new cleanup patches at the end of the FAN_REPORT_FID series, so you will be able to stage the feature with or without the VFS change. Thanks, Amir. Changes since v3: - Re-organize structs fsnotify_event and fanotify_event to pack the fields better on 64bit arch (NEW patch "move mask out of...") - Re-arrange building event fid in two main patches: "encode fid..." to in-kernel event struct and "copy event fid..." to uapi format - Avoid exporting statfs_by_dentry() and add 2 NEW cleanup patches to use new helper vfs_get_fsid() - Replace dodgy code using pointer bit 0 with proper type field in fanotify_event to indicate if path or fid info was stored - Store up to 12 bytes (on 32bit) or 16 bytes (on 64bit) of embedded file handle in fanotify_event to refrain from small memory allocations - Re-arrange code in copy_event_to_user(), so adding copy of fid to user is less convoluted - Replace convoluted code to verify all marks for a reported event have the same cached fsid with simpler code than uses any cached fsid Changes since v2: - Discard FSNOTIFY_EVENT_DENTRY data type changes - Cache fsid in connector instead of calling vfs_statfs() on every event - Deny setting fid watch on filesystem with no fsid (tmpfs) - Deny setting fid watch on filesystem with non root fsid (btrfs subvol) - Report FAN_ONDIR for all event types with FAN_REPORT_FID [1] https://github.com/amir73il/linux/commits/fanotify_dirent [2] https://github.com/amir73il/inotify-tools/commits/fanotify_dirent [3] https://github.com/amir73il/linux/commits/fanotify_fid-v3 [4] https://github.com/amir73il/linux/commits/fanotify_fid-v4 Amir Goldstein (15): fsnotify: annotate directory entry modification events fsnotify: send all event types to super block marks fsnotify: move mask out of struct fsnotify_event fanotify: rename struct fanotify_{,perm_}event_info fanotify: open code fill_event_metadata() fanotify: encode file identifier for FAN_REPORT_FID fanotify: copy event fid info to user fanotify: enable FAN_REPORT_FID init flag fanotify: cache fsid in fsnotify_mark_connector vfs: add vfs_get_fsid() helper fanotify: use vfs_get_fsid() helper instead of vfs_statfs() fanotify: check FS_ISDIR flag instead of d_is_dir() fanotify: support events with data type FSNOTIFY_EVENT_INODE fanotify: add support for create/attrib/move/delete events fanotify: report FAN_ONDIR to listener with FAN_REPORT_FID fs/notify/fanotify/fanotify.c | 228 +++++++++++++++++---- fs/notify/fanotify/fanotify.h | 109 ++++++++-- fs/notify/fanotify/fanotify_user.c | 284 +++++++++++++++++++-------- fs/notify/fsnotify.c | 15 +- fs/notify/inotify/inotify.h | 1 + fs/notify/inotify/inotify_fsnotify.c | 9 +- fs/notify/inotify/inotify_user.c | 5 +- fs/notify/mark.c | 44 ++++- fs/notify/notification.c | 22 +-- fs/statfs.c | 14 ++ include/linux/fanotify.h | 33 +++- include/linux/fsnotify.h | 45 ++++- include/linux/fsnotify_backend.h | 70 ++++--- include/linux/statfs.h | 3 + include/uapi/linux/fanotify.h | 29 +++ 15 files changed, 701 insertions(+), 210 deletions(-) -- 2.17.1