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>
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;