switch alloc_file() to passing struct path
... and have the caller grab both mnt and dentry; kill
leak in infiniband, while we are at it.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
index 9e4f900..8271cf0 100644
--- a/fs/notify/inotify/inotify_user.c
+++ b/fs/notify/inotify/inotify_user.c
@@ -646,6 +646,7 @@
struct fsnotify_group *group;
struct user_struct *user;
struct file *filp;
+ struct path path;
int fd, ret;
/* Check the IN_* constants for consistency. */
@@ -675,8 +676,10 @@
atomic_inc(&user->inotify_devs);
- filp = alloc_file(inotify_mnt, dget(inotify_mnt->mnt_root),
- FMODE_READ, &inotify_fops);
+ path.mnt = inotify_mnt;
+ path.dentry = inotify_mnt->mnt_root;
+ path_get(&path);
+ filp = alloc_file(&path, FMODE_READ, &inotify_fops);
if (!filp)
goto Enfile;
@@ -689,6 +692,7 @@
Enfile:
ret = -ENFILE;
+ path_put(&path);
atomic_dec(&user->inotify_devs);
out_free_uid:
free_uid(user);