diff options
author | Amir Goldstein <amir73il@gmail.com> | 2021-11-29 22:15:37 +0200 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2021-12-15 15:58:40 +0100 |
commit | 8cc3b1ccd930fe6971e1527f0c4f1bdc8cb56026 (patch) | |
tree | a4a2a7fdfbcb8f70f36f5e1e3b7f6c890b457172 /fs/notify/fanotify/fanotify_user.c | |
parent | 7326e382c21e9c23c89c88369afdc90b82a14da8 (diff) | |
download | lwn-8cc3b1ccd930fe6971e1527f0c4f1bdc8cb56026.tar.gz lwn-8cc3b1ccd930fe6971e1527f0c4f1bdc8cb56026.zip |
fanotify: wire up FAN_RENAME event
FAN_RENAME is the successor of FAN_MOVED_FROM and FAN_MOVED_TO
and can be used to get the old and new parent+name information in
a single event.
FAN_MOVED_FROM and FAN_MOVED_TO are still supported for backward
compatibility, but it makes little sense to use them together with
FAN_RENAME in the same group.
FAN_RENAME uses special info type records to report the old and
new parent+name, so reporting only old and new parent id is less
useful and was not implemented.
Therefore, FAN_REANAME requires a group with flag FAN_REPORT_NAME.
Link: https://lore.kernel.org/r/20211129201537.1932819-12-amir73il@gmail.com
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/notify/fanotify/fanotify_user.c')
-rw-r--r-- | fs/notify/fanotify/fanotify_user.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c index eb2a0251b318..73a3e939c921 100644 --- a/fs/notify/fanotify/fanotify_user.c +++ b/fs/notify/fanotify/fanotify_user.c @@ -1586,6 +1586,14 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask, (!fid_mode || mark_type == FAN_MARK_MOUNT)) goto fput_and_out; + /* + * FAN_RENAME uses special info type records to report the old and + * new parent+name. Reporting only old and new parent id is less + * useful and was not implemented. + */ + if (mask & FAN_RENAME && !(fid_mode & FAN_REPORT_NAME)) + goto fput_and_out; + if (flags & FAN_MARK_FLUSH) { ret = 0; if (mark_type == FAN_MARK_MOUNT) |