Loading fs/eventpoll.c +6 −13 Original line number Original line Diff line number Diff line Loading @@ -2203,29 +2203,22 @@ int do_epoll_ctl(int epfd, int op, int fd, struct epoll_event *epds, full_check = 1; full_check = 1; if (is_file_epoll(tf.file)) { if (is_file_epoll(tf.file)) { error = -ELOOP; error = -ELOOP; if (ep_loop_check(ep, tf.file) != 0) { if (ep_loop_check(ep, tf.file) != 0) clear_tfile_check_list(); goto error_tgt_fput; goto error_tgt_fput; } } else { } else { get_file(tf.file); get_file(tf.file); list_add(&tf.file->f_tfile_llink, list_add(&tf.file->f_tfile_llink, &tfile_check_list); &tfile_check_list); } } error = epoll_mutex_lock(&ep->mtx, 0, nonblock); error = epoll_mutex_lock(&ep->mtx, 0, nonblock); if (error) { if (error) out_del: list_del(&tf.file->f_tfile_llink); if (!is_file_epoll(tf.file)) fput(tf.file); goto error_tgt_fput; goto error_tgt_fput; } if (is_file_epoll(tf.file)) { if (is_file_epoll(tf.file)) { tep = tf.file->private_data; tep = tf.file->private_data; error = epoll_mutex_lock(&tep->mtx, 1, nonblock); error = epoll_mutex_lock(&tep->mtx, 1, nonblock); if (error) { if (error) { mutex_unlock(&ep->mtx); mutex_unlock(&ep->mtx); goto out_del; goto error_tgt_fput; } } } } } } Loading @@ -2246,8 +2239,6 @@ int do_epoll_ctl(int epfd, int op, int fd, struct epoll_event *epds, error = ep_insert(ep, epds, tf.file, fd, full_check); error = ep_insert(ep, epds, tf.file, fd, full_check); } else } else error = -EEXIST; error = -EEXIST; if (full_check) clear_tfile_check_list(); break; break; case EPOLL_CTL_DEL: case EPOLL_CTL_DEL: if (epi) if (epi) Loading @@ -2270,8 +2261,10 @@ int do_epoll_ctl(int epfd, int op, int fd, struct epoll_event *epds, mutex_unlock(&ep->mtx); mutex_unlock(&ep->mtx); error_tgt_fput: error_tgt_fput: if (full_check) if (full_check) { clear_tfile_check_list(); mutex_unlock(&epmutex); mutex_unlock(&epmutex); } fdput(tf); fdput(tf); error_fput: error_fput: Loading Loading
fs/eventpoll.c +6 −13 Original line number Original line Diff line number Diff line Loading @@ -2203,29 +2203,22 @@ int do_epoll_ctl(int epfd, int op, int fd, struct epoll_event *epds, full_check = 1; full_check = 1; if (is_file_epoll(tf.file)) { if (is_file_epoll(tf.file)) { error = -ELOOP; error = -ELOOP; if (ep_loop_check(ep, tf.file) != 0) { if (ep_loop_check(ep, tf.file) != 0) clear_tfile_check_list(); goto error_tgt_fput; goto error_tgt_fput; } } else { } else { get_file(tf.file); get_file(tf.file); list_add(&tf.file->f_tfile_llink, list_add(&tf.file->f_tfile_llink, &tfile_check_list); &tfile_check_list); } } error = epoll_mutex_lock(&ep->mtx, 0, nonblock); error = epoll_mutex_lock(&ep->mtx, 0, nonblock); if (error) { if (error) out_del: list_del(&tf.file->f_tfile_llink); if (!is_file_epoll(tf.file)) fput(tf.file); goto error_tgt_fput; goto error_tgt_fput; } if (is_file_epoll(tf.file)) { if (is_file_epoll(tf.file)) { tep = tf.file->private_data; tep = tf.file->private_data; error = epoll_mutex_lock(&tep->mtx, 1, nonblock); error = epoll_mutex_lock(&tep->mtx, 1, nonblock); if (error) { if (error) { mutex_unlock(&ep->mtx); mutex_unlock(&ep->mtx); goto out_del; goto error_tgt_fput; } } } } } } Loading @@ -2246,8 +2239,6 @@ int do_epoll_ctl(int epfd, int op, int fd, struct epoll_event *epds, error = ep_insert(ep, epds, tf.file, fd, full_check); error = ep_insert(ep, epds, tf.file, fd, full_check); } else } else error = -EEXIST; error = -EEXIST; if (full_check) clear_tfile_check_list(); break; break; case EPOLL_CTL_DEL: case EPOLL_CTL_DEL: if (epi) if (epi) Loading @@ -2270,8 +2261,10 @@ int do_epoll_ctl(int epfd, int op, int fd, struct epoll_event *epds, mutex_unlock(&ep->mtx); mutex_unlock(&ep->mtx); error_tgt_fput: error_tgt_fput: if (full_check) if (full_check) { clear_tfile_check_list(); mutex_unlock(&epmutex); mutex_unlock(&epmutex); } fdput(tf); fdput(tf); error_fput: error_fput: Loading