Commit b680716e authored by Robert Love's avatar Robert Love Committed by Linus Torvalds

[PATCH] inotify: misc. cleanup

Miscellaneous invariant clean up, comment fixes, and so on.  Trivial
stuff.
Signed-off-by: default avatarRobert Love <rml@novell.com>
Signed-off-by: default avatarJohn McCutchan <ttb@tentacle.dhs.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 2d986010
...@@ -62,8 +62,8 @@ int inotify_max_queued_events; ...@@ -62,8 +62,8 @@ int inotify_max_queued_events;
* Lifetimes of the three main data structures--inotify_device, inode, and * Lifetimes of the three main data structures--inotify_device, inode, and
* inotify_watch--are managed by reference count. * inotify_watch--are managed by reference count.
* *
* inotify_device: Lifetime is from open until release. Additional references * inotify_device: Lifetime is from inotify_init() until release. Additional
* can bump the count via get_inotify_dev() and drop the count via * references can bump the count via get_inotify_dev() and drop the count via
* put_inotify_dev(). * put_inotify_dev().
* *
* inotify_watch: Lifetime is from create_watch() to destory_watch(). * inotify_watch: Lifetime is from create_watch() to destory_watch().
...@@ -75,7 +75,7 @@ int inotify_max_queued_events; ...@@ -75,7 +75,7 @@ int inotify_max_queued_events;
*/ */
/* /*
* struct inotify_device - represents an open instance of an inotify device * struct inotify_device - represents an inotify instance
* *
* This structure is protected by the semaphore 'sem'. * This structure is protected by the semaphore 'sem'.
*/ */
...@@ -371,7 +371,7 @@ static int find_inode(const char __user *dirname, struct nameidata *nd) ...@@ -371,7 +371,7 @@ static int find_inode(const char __user *dirname, struct nameidata *nd)
/* you can only watch an inode if you have read permissions on it */ /* you can only watch an inode if you have read permissions on it */
error = permission(nd->dentry->d_inode, MAY_READ, NULL); error = permission(nd->dentry->d_inode, MAY_READ, NULL);
if (error) if (error)
path_release (nd); path_release(nd);
return error; return error;
} }
...@@ -387,7 +387,8 @@ static struct inotify_watch *create_watch(struct inotify_device *dev, ...@@ -387,7 +387,8 @@ static struct inotify_watch *create_watch(struct inotify_device *dev,
struct inotify_watch *watch; struct inotify_watch *watch;
int ret; int ret;
if (atomic_read(&dev->user->inotify_watches) >= inotify_max_user_watches) if (atomic_read(&dev->user->inotify_watches) >=
inotify_max_user_watches)
return ERR_PTR(-ENOSPC); return ERR_PTR(-ENOSPC);
watch = kmem_cache_alloc(watch_cachep, GFP_KERNEL); watch = kmem_cache_alloc(watch_cachep, GFP_KERNEL);
...@@ -783,15 +784,14 @@ static int inotify_release(struct inode *ignored, struct file *file) ...@@ -783,15 +784,14 @@ static int inotify_release(struct inode *ignored, struct file *file)
inotify_dev_event_dequeue(dev); inotify_dev_event_dequeue(dev);
up(&dev->sem); up(&dev->sem);
/* free this device: the put matching the get in inotify_open() */ /* free this device: the put matching the get in inotify_init() */
put_inotify_dev(dev); put_inotify_dev(dev);
return 0; return 0;
} }
/* /*
* inotify_ignore - handle the INOTIFY_IGNORE ioctl, asking that a given wd be * inotify_ignore - remove a given wd from this inotify instance.
* removed from the device.
* *
* Can sleep. * Can sleep.
*/ */
...@@ -856,15 +856,12 @@ asmlinkage long sys_inotify_init(void) ...@@ -856,15 +856,12 @@ asmlinkage long sys_inotify_init(void)
{ {
struct inotify_device *dev; struct inotify_device *dev;
struct user_struct *user; struct user_struct *user;
int ret = -ENOTTY; struct file *filp;
int fd; int fd, ret;
struct file *filp;
fd = get_unused_fd(); fd = get_unused_fd();
if (fd < 0) { if (fd < 0)
ret = fd; return fd;
goto out;
}
filp = get_empty_filp(); filp = get_empty_filp();
if (!filp) { if (!filp) {
...@@ -872,16 +869,11 @@ asmlinkage long sys_inotify_init(void) ...@@ -872,16 +869,11 @@ asmlinkage long sys_inotify_init(void)
ret = -ENFILE; ret = -ENFILE;
goto out; goto out;
} }
filp->f_op = &inotify_fops;
filp->f_vfsmnt = mntget(inotify_mnt);
filp->f_dentry = dget(inotify_mnt->mnt_root);
filp->f_mapping = filp->f_dentry->d_inode->i_mapping;
filp->f_mode = FMODE_READ;
filp->f_flags = O_RDONLY;
user = get_uid(current->user); user = get_uid(current->user);
if (unlikely(atomic_read(&user->inotify_devs) >= inotify_max_user_instances)) { if (unlikely(atomic_read(&user->inotify_devs) >=
inotify_max_user_instances)) {
ret = -EMFILE; ret = -EMFILE;
goto out_err; goto out_err;
} }
...@@ -892,6 +884,14 @@ asmlinkage long sys_inotify_init(void) ...@@ -892,6 +884,14 @@ asmlinkage long sys_inotify_init(void)
goto out_err; goto out_err;
} }
filp->f_op = &inotify_fops;
filp->f_vfsmnt = mntget(inotify_mnt);
filp->f_dentry = dget(inotify_mnt->mnt_root);
filp->f_mapping = filp->f_dentry->d_inode->i_mapping;
filp->f_mode = FMODE_READ;
filp->f_flags = O_RDONLY;
filp->private_data = dev;
idr_init(&dev->idr); idr_init(&dev->idr);
INIT_LIST_HEAD(&dev->events); INIT_LIST_HEAD(&dev->events);
INIT_LIST_HEAD(&dev->watches); INIT_LIST_HEAD(&dev->watches);
...@@ -905,9 +905,8 @@ asmlinkage long sys_inotify_init(void) ...@@ -905,9 +905,8 @@ asmlinkage long sys_inotify_init(void)
get_inotify_dev(dev); get_inotify_dev(dev);
atomic_inc(&user->inotify_devs); atomic_inc(&user->inotify_devs);
fd_install(fd, filp);
filp->private_data = dev;
fd_install (fd, filp);
return fd; return fd;
out_err: out_err:
put_unused_fd (fd); put_unused_fd (fd);
...@@ -917,7 +916,7 @@ out: ...@@ -917,7 +916,7 @@ out:
return ret; return ret;
} }
asmlinkage long sys_inotify_add_watch(int fd, const char *path, u32 mask) asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, u32 mask)
{ {
struct inotify_watch *watch, *old; struct inotify_watch *watch, *old;
struct inode *inode; struct inode *inode;
...@@ -930,21 +929,20 @@ asmlinkage long sys_inotify_add_watch(int fd, const char *path, u32 mask) ...@@ -930,21 +929,20 @@ asmlinkage long sys_inotify_add_watch(int fd, const char *path, u32 mask)
if (!filp) if (!filp)
return -EBADF; return -EBADF;
dev = filp->private_data; ret = find_inode(path, &nd);
if (unlikely(ret))
ret = find_inode((const char __user*) path, &nd);
if (ret)
goto fput_and_out; goto fput_and_out;
/* Held in place by reference in nd */ /* inode held in place by reference to nd; dev by fget on fd */
inode = nd.dentry->d_inode; inode = nd.dentry->d_inode;
dev = filp->private_data;
down(&inode->inotify_sem); down(&inode->inotify_sem);
down(&dev->sem); down(&dev->sem);
/* don't let user-space set invalid bits: we don't want flags set */ /* don't let user-space set invalid bits: we don't want flags set */
mask &= IN_ALL_EVENTS; mask &= IN_ALL_EVENTS;
if (!mask) { if (unlikely(!mask)) {
ret = -EINVAL; ret = -EINVAL;
goto out; goto out;
} }
...@@ -1009,11 +1007,11 @@ static struct file_system_type inotify_fs_type = { ...@@ -1009,11 +1007,11 @@ static struct file_system_type inotify_fs_type = {
}; };
/* /*
* inotify_init - Our initialization function. Note that we cannnot return * inotify_setup - Our initialization function. Note that we cannnot return
* error because we have compiled-in VFS hooks. So an (unlikely) failure here * error because we have compiled-in VFS hooks. So an (unlikely) failure here
* must result in panic(). * must result in panic().
*/ */
static int __init inotify_init(void) static int __init inotify_setup(void)
{ {
register_filesystem(&inotify_fs_type); register_filesystem(&inotify_fs_type);
inotify_mnt = kern_mount(&inotify_fs_type); inotify_mnt = kern_mount(&inotify_fs_type);
...@@ -1034,4 +1032,4 @@ static int __init inotify_init(void) ...@@ -1034,4 +1032,4 @@ static int __init inotify_init(void)
return 0; return 0;
} }
module_init(inotify_init); module_init(inotify_setup);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment