diff options
author | Robert Love <rml@novell.com> | 2005-07-12 17:06:03 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-12 23:38:38 -0400 |
commit | 0eeca28300df110bd6ed54b31193c83b87921443 (patch) | |
tree | 7db42d8a18d80eca538f5b7d25e0532b8fa38b85 /include/linux/fs.h | |
parent | bd4c625c061c2a38568d0add3478f59172455159 (diff) |
[PATCH] inotify
inotify is intended to correct the deficiencies of dnotify, particularly
its inability to scale and its terrible user interface:
* dnotify requires the opening of one fd per each directory
that you intend to watch. This quickly results in too many
open files and pins removable media, preventing unmount.
* dnotify is directory-based. You only learn about changes to
directories. Sure, a change to a file in a directory affects
the directory, but you are then forced to keep a cache of
stat structures.
* dnotify's interface to user-space is awful. Signals?
inotify provides a more usable, simple, powerful solution to file change
notification:
* inotify's interface is a system call that returns a fd, not SIGIO.
You get a single fd, which is select()-able.
* inotify has an event that says "the filesystem that the item
you were watching is on was unmounted."
* inotify can watch directories or files.
Inotify is currently used by Beagle (a desktop search infrastructure),
Gamin (a FAM replacement), and other projects.
See Documentation/filesystems/inotify.txt.
Signed-off-by: Robert Love <rml@novell.com>
Cc: John McCutchan <ttb@tentacle.dhs.org>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r-- | include/linux/fs.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 302ec20838ca..c9bf3746a9fb 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -474,6 +474,11 @@ struct inode { | |||
474 | struct dnotify_struct *i_dnotify; /* for directory notifications */ | 474 | struct dnotify_struct *i_dnotify; /* for directory notifications */ |
475 | #endif | 475 | #endif |
476 | 476 | ||
477 | #ifdef CONFIG_INOTIFY | ||
478 | struct list_head inotify_watches; /* watches on this inode */ | ||
479 | struct semaphore inotify_sem; /* protects the watches list */ | ||
480 | #endif | ||
481 | |||
477 | unsigned long i_state; | 482 | unsigned long i_state; |
478 | unsigned long dirtied_when; /* jiffies of first dirtying */ | 483 | unsigned long dirtied_when; /* jiffies of first dirtying */ |
479 | 484 | ||
@@ -1393,7 +1398,6 @@ extern void emergency_remount(void); | |||
1393 | extern int do_remount_sb(struct super_block *sb, int flags, | 1398 | extern int do_remount_sb(struct super_block *sb, int flags, |
1394 | void *data, int force); | 1399 | void *data, int force); |
1395 | extern sector_t bmap(struct inode *, sector_t); | 1400 | extern sector_t bmap(struct inode *, sector_t); |
1396 | extern int setattr_mask(unsigned int); | ||
1397 | extern int notify_change(struct dentry *, struct iattr *); | 1401 | extern int notify_change(struct dentry *, struct iattr *); |
1398 | extern int permission(struct inode *, int, struct nameidata *); | 1402 | extern int permission(struct inode *, int, struct nameidata *); |
1399 | extern int generic_permission(struct inode *, int, | 1403 | extern int generic_permission(struct inode *, int, |