]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Revert "eventfs: Remove "is_freed" union with rcu head"
authorSteven Rostedt (Google) <rostedt@goodmis.org>
Tue, 6 Feb 2024 12:09:11 +0000 (07:09 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Feb 2024 08:25:19 +0000 (09:25 +0100)
This reverts commit fa18a8a0539b02cc621938091691f0b73f0b1288.

The eventfs was not designed properly and may have some hidden bugs in it.
Linus rewrote it properly and I trust his version more than this one. Revert
the backported patches for 6.6 and re-apply all the changes to make it
equivalent to Linus's version.

Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/tracefs/event_inode.c

index a64d8fa39e5400fa40c9efdf9efb086343ee90da..8c8d64e76103e130aeab0a8f913822abf1b0b5af 100644 (file)
@@ -38,7 +38,6 @@ struct eventfs_inode {
  * @fop:       file_operations for file or directory
  * @iop:       inode_operations for file or directory
  * @data:      something that the caller will want to get to later on
- * @is_freed:  Flag set if the eventfs is on its way to be freed
  * @mode:      the permission that the file or directory should have
  */
 struct eventfs_file {
@@ -53,14 +52,15 @@ struct eventfs_file {
         * Union - used for deletion
         * @del_list:   list of eventfs_file to delete
         * @rcu:        eventfs_file to delete in RCU
+        * @is_freed:   node is freed if one of the above is set
         */
        union {
                struct list_head        del_list;
                struct rcu_head         rcu;
+               unsigned long           is_freed;
        };
        void                            *data;
-       unsigned int                    is_freed:1;
-       unsigned int                    mode:31;
+       umode_t                         mode;
 };
 
 static DEFINE_MUTEX(eventfs_mutex);
@@ -814,8 +814,6 @@ static void eventfs_remove_rec(struct eventfs_file *ef, struct list_head *head,
                }
        }
 
-       ef->is_freed = 1;
-
        list_del_rcu(&ef->list);
        list_add_tail(&ef->del_list, head);
 }