]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Fix memory leak in epoll
authorJerzy Szczepkowski <js189202@zodiac.mimuw.edu.pl>
Tue, 6 Jul 2004 16:20:10 +0000 (09:20 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 6 Jul 2004 16:20:10 +0000 (09:20 -0700)
There was a memory leak in epoll.

The reference count (d_count) of the struct dentry of a new epoll-fd was
set to TWO.  (new_inode() assigned ONE, than ep_getfd() incremented it by
dget()).  There was only ONE reference to this dentry, so struct dentry and
struct inode were never freed.

Signed-off-by: Davide Libenzi <davidel@xmailserver.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/eventpoll.c

index a05a3ce255b81d4da22a4540a8218c10c7db98d6..c81ddcd31abae1beb51672f7405230470bffa6d7 100644 (file)
@@ -716,7 +716,7 @@ static int ep_getfd(int *efd, struct inode **einode, struct file **efile)
        dentry->d_op = &eventpollfs_dentry_operations;
        d_add(dentry, inode);
        file->f_vfsmnt = mntget(eventpoll_mnt);
-       file->f_dentry = dget(dentry);
+       file->f_dentry = dentry;
        file->f_mapping = inode->i_mapping;
 
        file->f_pos = 0;