Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 83382
b: refs/heads/master
c: bcfbf84
h: refs/heads/master
v: v3
  • Loading branch information
Dmitry Antipov authored and Linus Torvalds committed Feb 6, 2008
1 parent 956b7f8 commit cc1bd02
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 14e11e106bf90c52c69373ac6abd3a494918808f
refs/heads/master: bcfbf84d4067674b0740a39605f8057622ad5230
14 changes: 14 additions & 0 deletions trunk/fs/inotify_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ struct inotify_device {
atomic_t count; /* reference count */
struct user_struct *user; /* user who opened this dev */
struct inotify_handle *ih; /* inotify handle */
struct fasync_struct *fa; /* async notification */
unsigned int queue_size; /* size of the queue (bytes) */
unsigned int event_count; /* number of pending events */
unsigned int max_events; /* maximum number of events */
Expand Down Expand Up @@ -315,6 +316,7 @@ static void inotify_dev_queue_event(struct inotify_watch *w, u32 wd, u32 mask,
dev->queue_size += sizeof(struct inotify_event) + kevent->event.len;
list_add_tail(&kevent->list, &dev->events);
wake_up_interruptible(&dev->wq);
kill_fasync(&dev->fa, SIGIO, POLL_IN);

out:
mutex_unlock(&dev->ev_mutex);
Expand Down Expand Up @@ -503,6 +505,13 @@ static ssize_t inotify_read(struct file *file, char __user *buf,
return ret;
}

static int inotify_fasync(int fd, struct file *file, int on)
{
struct inotify_device *dev = file->private_data;

return fasync_helper(fd, file, on, &dev->fa) >= 0 ? 0 : -EIO;
}

static int inotify_release(struct inode *ignored, struct file *file)
{
struct inotify_device *dev = file->private_data;
Expand All @@ -515,6 +524,9 @@ static int inotify_release(struct inode *ignored, struct file *file)
inotify_dev_event_dequeue(dev);
mutex_unlock(&dev->ev_mutex);

if (file->f_flags & FASYNC)
inotify_fasync(-1, file, 0);

/* free this device: the put matching the get in inotify_init() */
put_inotify_dev(dev);

Expand Down Expand Up @@ -543,6 +555,7 @@ static long inotify_ioctl(struct file *file, unsigned int cmd,
static const struct file_operations inotify_fops = {
.poll = inotify_poll,
.read = inotify_read,
.fasync = inotify_fasync,
.release = inotify_release,
.unlocked_ioctl = inotify_ioctl,
.compat_ioctl = inotify_ioctl,
Expand Down Expand Up @@ -590,6 +603,7 @@ asmlinkage long sys_inotify_init(void)
goto out_free_dev;
}
dev->ih = ih;
dev->fa = NULL;

filp->f_op = &inotify_fops;
filp->f_path.mnt = mntget(inotify_mnt);
Expand Down

0 comments on commit cc1bd02

Please sign in to comment.