diff options
| author | Stephen Rothwell <sfr@canb.auug.org.au> | 2002-03-11 20:47:35 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-03-11 20:47:35 -0800 |
| commit | d7d3ae66500056c821c1e183b64bc388348f8e2d (patch) | |
| tree | e8ee82a4180e62a0282478581ea0dc1c4fba62ee | |
| parent | cbada281cd3defea968e1edc7ad37cb21082aa9b (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.c | 5 | ||||
| -rw-r--r-- | include/linux/dnotify.h | 1 |
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 |
