summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2002-03-11 20:47:35 -0800
committerLinus Torvalds <torvalds@home.transmeta.com>2002-03-11 20:47:35 -0800
commitd7d3ae66500056c821c1e183b64bc388348f8e2d (patch)
treee8ee82a4180e62a0282478581ea0dc1c4fba62ee
parentcbada281cd3defea968e1edc7ad37cb21082aa9b (diff)
[PATCH] dnotify
The following patch makes directory notifications per thread group instead of per process tree as they are now. This means, in particular, that if a child closes a file descriptor that has a directory open with notifies enabled, the notification will not be removed. Thanks to Andrea for the push in the right direction.
-rw-r--r--fs/dnotify.c5
-rw-r--r--include/linux/dnotify.h1
2 files changed, 4 insertions, 2 deletions
diff --git a/fs/dnotify.c b/fs/dnotify.c
index 5711e6b41752..3cf7f0656f28 100644
--- a/fs/dnotify.c
+++ b/fs/dnotify.c
@@ -1,7 +1,7 @@
/*
* Directory notifications for Linux.
*
- * Copyright (C) 2000 Stephen Rothwell
+ * Copyright (C) 2000,2001,2002 Stephen Rothwell
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -59,7 +59,7 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg)
write_lock(&dn_lock);
prev = &inode->i_dnotify;
for (odn = *prev; odn != NULL; prev = &odn->dn_next, odn = *prev)
- if (odn->dn_filp == filp)
+ if ((odn->dn_owner == current->files) && (odn->dn_filp == filp))
break;
if (odn != NULL) {
if (turning_off) {
@@ -82,6 +82,7 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg)
dn->dn_mask = arg;
dn->dn_fd = fd;
dn->dn_filp = filp;
+ dn->dn_owner = current->files;
inode->i_dnotify_mask |= arg & ~DN_MULTISHOT;
dn->dn_next = inode->i_dnotify;
inode->i_dnotify = dn;
diff --git a/include/linux/dnotify.h b/include/linux/dnotify.h
index 60c1e2117f10..23e8733ab4fb 100644
--- a/include/linux/dnotify.h
+++ b/include/linux/dnotify.h
@@ -13,6 +13,7 @@ struct dnotify_struct {
see linux/fcntl.h */
int dn_fd;
struct file * dn_filp;
+ fl_owner_t dn_owner;
};
#define DNOTIFY_MAGIC 0x444E4F54