diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2020-09-26 15:54:05 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2020-10-25 20:01:54 -0400 |
commit | d16312a46936baa1a44b5f78394f4b0d1d01762a (patch) | |
tree | 08df6e4b5befc041a859dae0e89e30b4634287f0 /fs/eventpoll.c | |
parent | 0c320f776ed83e1ebde4d49bc316b23e868b4737 (diff) | |
download | linux-stable-d16312a46936baa1a44b5f78394f4b0d1d01762a.tar.gz linux-stable-d16312a46936baa1a44b5f78394f4b0d1d01762a.tar.bz2 linux-stable-d16312a46936baa1a44b5f78394f4b0d1d01762a.zip |
clean reverse_path_check_proc() a bit
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/eventpoll.c')
-rw-r--r-- | fs/eventpoll.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/fs/eventpoll.c b/fs/eventpoll.c index 0f540e91aa92..33af838046ea 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c @@ -1317,23 +1317,15 @@ static int reverse_path_check_proc(struct file *file, int depth) /* CTL_DEL can remove links here, but that can't increase our count */ rcu_read_lock(); list_for_each_entry_rcu(epi, &file->f_ep_links, fllink) { - struct file *child_file = epi->ep->file; - if (is_file_epoll(child_file)) { - if (list_empty(&child_file->f_ep_links)) { - if (path_count_inc(depth)) { - error = -1; - break; - } - } else { - error = reverse_path_check_proc(child_file, - depth + 1); - } - if (error != 0) - break; - } else { - printk(KERN_ERR "reverse_path_check_proc: " - "file is not an ep!\n"); - } + struct file *recepient = epi->ep->file; + if (WARN_ON(!is_file_epoll(recepient))) + continue; + if (list_empty(&recepient->f_ep_links)) + error = path_count_inc(depth); + else + error = reverse_path_check_proc(recepient, depth + 1); + if (error != 0) + break; } rcu_read_unlock(); return error; |