| From: Jason Baron <jbaron@redhat.com> |
| Date: Fri, 16 Mar 2012 16:34:03 -0400 |
| Subject: Don't limit non-nested epoll paths |
| |
| commit 93dc6107a76daed81c07f50215fa6ae77691634f upstream. |
| |
| Commit 28d82dc1c4ed ("epoll: limit paths") that I did to limit the |
| number of possible wakeup paths in epoll is causing a few applications |
| to longer work (dovecot for one). |
| |
| The original patch is really about limiting the amount of epoll nesting |
| (since epoll fds can be attached to other fds). Thus, we probably can |
| allow an unlimited number of paths of depth 1. My current patch limits |
| it at 1000. And enforce the limits on paths that have a greater depth. |
| |
| This is captured in: https://bugzilla.redhat.com/show_bug.cgi?id=681578 |
| |
| Signed-off-by: Jason Baron <jbaron@redhat.com> |
| Cc: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| fs/eventpoll.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/fs/eventpoll.c |
| +++ b/fs/eventpoll.c |
| @@ -988,6 +988,10 @@ static int path_count[PATH_ARR_SIZE]; |
| |
| static int path_count_inc(int nests) |
| { |
| + /* Allow an arbitrary number of depth 1 paths */ |
| + if (nests == 0) |
| + return 0; |
| + |
| if (++path_count[nests] > path_limits[nests]) |
| return -1; |
| return 0; |