* not already there, and calling reverse_path_check()
                         * during ep_insert().
                         */
-                       if (list_empty(&epi->ffd.file->f_tfile_llink))
+                       if (list_empty(&epi->ffd.file->f_tfile_llink)) {
+                               get_file(epi->ffd.file);
                                list_add(&epi->ffd.file->f_tfile_llink,
                                         &tfile_check_list);
+                       }
                }
        }
        mutex_unlock(&ep->mtx);
                file = list_first_entry(&tfile_check_list, struct file,
                                        f_tfile_llink);
                list_del_init(&file->f_tfile_llink);
+               fput(file);
        }
        INIT_LIST_HEAD(&tfile_check_list);
 }
                                        clear_tfile_check_list();
                                        goto error_tgt_fput;
                                }
-                       } else
+                       } else {
+                               get_file(tf.file);
                                list_add(&tf.file->f_tfile_llink,
                                                        &tfile_check_list);
+                       }
                        error = epoll_mutex_lock(&ep->mtx, 0, nonblock);
                        if (error) {
 out_del:
                                list_del(&tf.file->f_tfile_llink);
+                               if (!is_file_epoll(tf.file))
+                                       fput(tf.file);
                                goto error_tgt_fput;
                        }
                        if (is_file_epoll(tf.file)) {