fanotify: remove event FAN_DIR_MODIFY
authorAmir Goldstein <amir73il@gmail.com>
Wed, 8 Jul 2020 11:11:52 +0000 (14:11 +0300)
committerJan Kara <jack@suse.cz>
Mon, 27 Jul 2020 19:23:36 +0000 (21:23 +0200)
It was never enabled in uapi and its functionality is about to be
superseded by events FAN_CREATE, FAN_DELETE, FAN_MOVE with group
flag FAN_REPORT_NAME.

Keep a place holder variable name_event instead of removing the
name recording code since it will be used by the new events.

Link: https://lore.kernel.org/r/20200708111156.24659-17-amir73il@gmail.com
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/notify/fanotify/fanotify.c
fs/notify/fsnotify.c
include/linux/fsnotify.h
include/linux/fsnotify_backend.h
include/uapi/linux/fanotify.h

index e417c64..e6ba605 100644 (file)
@@ -425,6 +425,7 @@ static struct fanotify_event *fanotify_alloc_event(struct fsnotify_group *group,
        gfp_t gfp = GFP_KERNEL_ACCOUNT;
        struct inode *id = fanotify_fid_inode(mask, data, data_type, dir);
        const struct path *path = fsnotify_data_path(data, data_type);
+       bool name_event = false;
 
        /*
         * For queues with unlimited length lost events are not expected and
@@ -442,12 +443,7 @@ static struct fanotify_event *fanotify_alloc_event(struct fsnotify_group *group,
 
        if (fanotify_is_perm_event(mask)) {
                event = fanotify_alloc_perm_event(path, gfp);
-       } else if (mask & FAN_DIR_MODIFY && !(WARN_ON_ONCE(!file_name))) {
-               /*
-                * For FAN_DIR_MODIFY event, we report the fid of the directory
-                * and the name of the modified entry.
-                * Allocate an fanotify_name_event struct and copy the name.
-                */
+       } else if (name_event && file_name) {
                event = fanotify_alloc_name_event(id, fsid, file_name, gfp);
        } else if (FAN_GROUP_FLAG(group, FAN_REPORT_FID)) {
                event = fanotify_alloc_fid_event(id, fsid, gfp);
@@ -528,7 +524,6 @@ static int fanotify_handle_event(struct fsnotify_group *group, u32 mask,
        BUILD_BUG_ON(FAN_MOVED_FROM != FS_MOVED_FROM);
        BUILD_BUG_ON(FAN_CREATE != FS_CREATE);
        BUILD_BUG_ON(FAN_DELETE != FS_DELETE);
-       BUILD_BUG_ON(FAN_DIR_MODIFY != FS_DIR_MODIFY);
        BUILD_BUG_ON(FAN_DELETE_SELF != FS_DELETE_SELF);
        BUILD_BUG_ON(FAN_MOVE_SELF != FS_MOVE_SELF);
        BUILD_BUG_ON(FAN_EVENT_ON_CHILD != FS_EVENT_ON_CHILD);
index c4ac4d1..f12a554 100644 (file)
@@ -393,7 +393,7 @@ static __init int fsnotify_init(void)
 {
        int ret;
 
-       BUILD_BUG_ON(HWEIGHT32(ALL_FSNOTIFY_BITS) != 26);
+       BUILD_BUG_ON(HWEIGHT32(ALL_FSNOTIFY_BITS) != 25);
 
        ret = init_srcu_struct(&fsnotify_mark_srcu);
        if (ret)
index 316c9b8..9b2566d 100644 (file)
@@ -30,12 +30,6 @@ static inline void fsnotify_name(struct inode *dir, __u32 mask,
                                 const struct qstr *name, u32 cookie)
 {
        fsnotify(dir, mask, child, FSNOTIFY_EVENT_INODE, name, cookie);
-       /*
-        * Send another flavor of the event without child inode data and
-        * without the specific event type (e.g. FS_CREATE|FS_IS_DIR).
-        * The name is relative to the dir inode the event is reported to.
-        */
-       fsnotify(dir, FS_DIR_MODIFY, dir, FSNOTIFY_EVENT_INODE, name, 0);
 }
 
 static inline void fsnotify_dirent(struct inode *dir, struct dentry *dentry,
index 0de130c..94a4ff3 100644 (file)
@@ -47,7 +47,6 @@
 #define FS_OPEN_PERM           0x00010000      /* open event in an permission hook */
 #define FS_ACCESS_PERM         0x00020000      /* access event in a permissions hook */
 #define FS_OPEN_EXEC_PERM      0x00040000      /* open/exec event in a permission hook */
-#define FS_DIR_MODIFY          0x00080000      /* Directory entry was modified */
 
 #define FS_EXCL_UNLINK         0x04000000      /* do not send events if object is unlinked */
 /* This inode cares about things that happen to its children.  Always set for
@@ -67,8 +66,7 @@
  * The watching parent may get an FS_ATTRIB|FS_EVENT_ON_CHILD event
  * when a directory entry inside a child subdir changes.
  */
-#define ALL_FSNOTIFY_DIRENT_EVENTS     (FS_CREATE | FS_DELETE | FS_MOVE | \
-                                        FS_DIR_MODIFY)
+#define ALL_FSNOTIFY_DIRENT_EVENTS     (FS_CREATE | FS_DELETE | FS_MOVE)
 
 #define ALL_FSNOTIFY_PERM_EVENTS (FS_OPEN_PERM | FS_ACCESS_PERM | \
                                  FS_OPEN_EXEC_PERM)
index a88c7c6..7f2f17e 100644 (file)
@@ -24,7 +24,6 @@
 #define FAN_OPEN_PERM          0x00010000      /* File open in perm check */
 #define FAN_ACCESS_PERM                0x00020000      /* File accessed in perm check */
 #define FAN_OPEN_EXEC_PERM     0x00040000      /* File open/exec in perm check */
-#define FAN_DIR_MODIFY         0x00080000      /* Directory entry was modified */
 
 #define FAN_EVENT_ON_CHILD     0x08000000      /* Interested in child events */