]> git.ipfire.org Git - thirdparty/linux.git/blobdiff - fs/file_table.c
file: massage cleanup of files that failed to open
[thirdparty/linux.git] / fs / file_table.c
index de4a2915bfd4941281915be92ce7dbdd8f67ac3b..6deac386486d0244fa9e5ba51746caab946e1e9f 100644 (file)
@@ -75,18 +75,6 @@ static inline void file_free(struct file *f)
        }
 }
 
-void release_empty_file(struct file *f)
-{
-       WARN_ON_ONCE(f->f_mode & (FMODE_BACKING | FMODE_OPENED));
-       if (atomic_long_dec_and_test(&f->f_count)) {
-               security_file_free(f);
-               put_cred(f->f_cred);
-               if (likely(!(f->f_mode & FMODE_NOACCOUNT)))
-                       percpu_counter_dec(&nr_files);
-               kmem_cache_free(filp_cachep, f);
-       }
-}
-
 /*
  * Return the total number of open files in the system
  */
@@ -445,6 +433,10 @@ void fput(struct file *file)
        if (atomic_long_dec_and_test(&file->f_count)) {
                struct task_struct *task = current;
 
+               if (unlikely(!(file->f_mode & (FMODE_BACKING | FMODE_OPENED)))) {
+                       file_free(file);
+                       return;
+               }
                if (likely(!in_interrupt() && !(task->flags & PF_KTHREAD))) {
                        init_task_work(&file->f_rcuhead, ____fput);
                        if (!task_work_add(task, &file->f_rcuhead, TWA_RESUME))