return 0;
 }
 
+static int tracefs_drop_inode(struct inode *inode)
+{
+       struct tracefs_inode *ti = get_tracefs(inode);
+
+       /*
+        * This inode is being freed and cannot be used for
+        * eventfs. Clear the flag so that it doesn't call into
+        * eventfs during the remount flag updates. The eventfs_inode
+        * gets freed after an RCU cycle, so the content will still
+        * be safe if the iteration is going on now.
+        */
+       ti->flags &= ~TRACEFS_EVENT_INODE;
+
+       return 1;
+}
+
 static const struct super_operations tracefs_super_operations = {
        .alloc_inode    = tracefs_alloc_inode,
        .free_inode     = tracefs_free_inode,
-       .drop_inode     = generic_delete_inode,
+       .drop_inode     = tracefs_drop_inode,
        .statfs         = simple_statfs,
        .show_options   = tracefs_show_options,
 };
        return !(ei && ei->is_freed);
 }
 
-static void tracefs_d_iput(struct dentry *dentry, struct inode *inode)
-{
-       struct tracefs_inode *ti = get_tracefs(inode);
-
-       /*
-        * This inode is being freed and cannot be used for
-        * eventfs. Clear the flag so that it doesn't call into
-        * eventfs during the remount flag updates. The eventfs_inode
-        * gets freed after an RCU cycle, so the content will still
-        * be safe if the iteration is going on now.
-        */
-       ti->flags &= ~TRACEFS_EVENT_INODE;
-}
-
 static const struct dentry_operations tracefs_dentry_operations = {
-       .d_iput = tracefs_d_iput,
        .d_revalidate = tracefs_d_revalidate,
        .d_release = tracefs_d_release,
 };