2009-07-02 05:04:10

by Keith Packard

[permalink] [raw]
Subject: [PATCH] fs/notify/inotify: decrement user inotify count on close

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


2009-07-02 12:15:04

by Eric Paris

[permalink] [raw]
Subject: Re: [PATCH] fs/notify/inotify: decrement user inotify count on close

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

2009-07-26 15:46:52

by Alex Riesen

[permalink] [raw]
Subject: Re: [PATCH] fs/notify/inotify: decrement user inotify count on close

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.

2009-07-26 15:57:54

by Alex Riesen

[permalink] [raw]
Subject: Re: [PATCH] fs/notify/inotify: decrement user inotify count on close

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