The per-user inotify_devs value is incremented each time a new file is
allocated, but never decremented. This led to inotify_init failing after a
limited number of calls.
Signed-off-by: Keith Packard <[email protected]>
---
fs/notify/inotify/inotify_user.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
index ff231ad..ff27a29 100644
--- a/fs/notify/inotify/inotify_user.c
+++ b/fs/notify/inotify/inotify_user.c
@@ -296,12 +296,15 @@ static int inotify_fasync(int fd, struct file *file, int on)
static int inotify_release(struct inode *ignored, struct file *file)
{
struct fsnotify_group *group = file->private_data;
+ struct user_struct *user = group->inotify_data.user;
fsnotify_clear_marks_by_group(group);
/* free this group, matching get was inotify_init->fsnotify_obtain_group */
fsnotify_put_group(group);
+ atomic_dec(&user->inotify_devs);
+
return 0;
}
--
1.6.3.1
On Wed, 2009-07-01 at 21:56 -0700, Keith Packard wrote:
> The per-user inotify_devs value is incremented each time a new file is
> allocated, but never decremented. This led to inotify_init failing after a
> limited number of calls.
>
> Signed-off-by: Keith Packard <[email protected]>
Thanks, I will push to Linus later today, sorry about the regression!
-Eric
On Thu, Jul 2, 2009 at 14:14, Eric Paris<[email protected]> wrote:
> On Wed, 2009-07-01 at 21:56 -0700, Keith Packard wrote:
>> The per-user inotify_devs value is incremented each time a new file is
>> allocated, but never decremented. This led to inotify_init failing after a
>> limited number of calls.
>>
>> Signed-off-by: Keith Packard <[email protected]>
>
> Thanks, I will push to Linus later today, sorry about the regression!
>
Hmm... Either the patch wasn't enough, or it was broken again.
On v2.6.31-rc4, I get this:
# echo 10 >/proc/sys/fs/inotify/max_user_watches
# inotifywatch -r /usr/lib # generate watches up to the limit
Establishing watches...
Failed to watch /bin; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via
`/proc/sys/fs/inotify/max_user_watches'.
# inotifywatch /bin/true # just one watch for just one file
AFAIU, the second inotifywatch should work, and the watches of the first,
failed, run must be cleared.
On Sun, Jul 26, 2009 at 17:46, Alex Riesen<[email protected]> wrote:
> On Thu, Jul 2, 2009 at 14:14, Eric Paris<[email protected]> wrote:
>> On Wed, 2009-07-01 at 21:56 -0700, Keith Packard wrote:
>>> The per-user inotify_devs value is incremented each time a new file is
>>> allocated, but never decremented. This led to inotify_init failing after a
>>> limited number of calls.
>>>
>>> Signed-off-by: Keith Packard <[email protected]>
>>
>> Thanks, I will push to Linus later today, sorry about the regression!
>>
>
> Hmm... Either the patch wasn't enough, or it was broken again.
The bug seem to be known since 2.6.28:
http://bugzilla.kernel.org/show_bug.cgi?id=12754