From: Robert Love make dnotify configurable, via CONFIG_DNOTIFY. Signed-off-by: Andrew Morton --- 25-akpm/Documentation/dnotify.txt | 6 ++++ 25-akpm/fs/Kconfig | 11 +++++++++ 25-akpm/fs/Makefile | 13 +++++----- 25-akpm/include/linux/dnotify.h | 46 +++++++++++++++++++++++++++++++++----- 25-akpm/include/linux/fs.h | 8 +++++- 25-akpm/kernel/sysctl.c | 2 + 6 files changed, 74 insertions(+), 12 deletions(-) diff -puN Documentation/dnotify.txt~make-dnotify-a-configure-time-option Documentation/dnotify.txt --- 25/Documentation/dnotify.txt~make-dnotify-a-configure-time-option 2004-10-26 01:27:19.927870416 -0700 +++ 25-akpm/Documentation/dnotify.txt 2004-10-26 01:27:19.939868592 -0700 @@ -54,6 +54,12 @@ directory "b". Also, files that are unlinked, will still cause notifications in the last directory that they were linked to. +Configuration +------------- + +Dnotify is controlled via the CONFIG_DNOTIFY configuration option. When +disabled, fcntl(fd, F_NOTIFY, ...) will return -EINVAL. + Example ------- diff -puN fs/Kconfig~make-dnotify-a-configure-time-option fs/Kconfig --- 25/fs/Kconfig~make-dnotify-a-configure-time-option 2004-10-26 01:27:19.929870112 -0700 +++ 25-akpm/fs/Kconfig 2004-10-26 01:27:19.941868288 -0700 @@ -440,6 +440,17 @@ config QUOTACTL depends on XFS_QUOTA || QUOTA default y +config DNOTIFY + bool "Dnotify support" + default y + help + Dnotify is a directory-based per-fd file change notification system + that uses signals to communicate events to user-space. There exist + superior alternatives, but some applications may still rely on + dnotify. + + Because of this, if unsure, say Y. + config AUTOFS_FS tristate "Kernel automounter support" help diff -puN fs/Makefile~make-dnotify-a-configure-time-option fs/Makefile --- 25/fs/Makefile~make-dnotify-a-configure-time-option 2004-10-26 01:27:19.930869960 -0700 +++ 25-akpm/fs/Makefile 2004-10-26 01:27:19.941868288 -0700 @@ -5,12 +5,11 @@ # Rewritten to use lists instead of if-statements. # -obj-y := open.o read_write.o file_table.o buffer.o \ - bio.o super.o block_dev.o char_dev.o stat.o exec.o pipe.o \ - namei.o fcntl.o ioctl.o readdir.o select.o fifo.o locks.o \ - dcache.o inode.o attr.o bad_inode.o file.o dnotify.o \ - filesystems.o namespace.o seq_file.o xattr.o libfs.o \ - fs-writeback.o mpage.o direct-io.o aio.o +obj-y := open.o read_write.o file_table.o buffer.o bio.o super.o \ + block_dev.o char_dev.o stat.o exec.o pipe.o namei.o fcntl.o \ + ioctl.o readdir.o select.o fifo.o locks.o dcache.o inode.o \ + attr.o bad_inode.o file.o filesystems.o namespace.o aio.o \ + seq_file.o xattr.o libfs.o fs-writeback.o mpage.o direct-io.o \ obj-$(CONFIG_EPOLL) += eventpoll.o obj-$(CONFIG_COMPAT) += compat.o @@ -37,6 +36,8 @@ obj-$(CONFIG_QFMT_V1) += quota_v1.o obj-$(CONFIG_QFMT_V2) += quota_v2.o obj-$(CONFIG_QUOTACTL) += quota.o +obj-$(CONFIG_DNOTIFY) += dnotify.o + obj-$(CONFIG_PROC_FS) += proc/ obj-y += partitions/ obj-$(CONFIG_SYSFS) += sysfs/ diff -puN include/linux/dnotify.h~make-dnotify-a-configure-time-option include/linux/dnotify.h --- 25/include/linux/dnotify.h~make-dnotify-a-configure-time-option 2004-10-26 01:27:19.932869656 -0700 +++ 25-akpm/include/linux/dnotify.h 2004-10-26 01:27:19.942868136 -0700 @@ -1,3 +1,5 @@ +#ifndef _LINUX_DNOTIFY_H +#define _LINUX_DNOTIFY_H /* * Directory notification for Linux * @@ -8,20 +10,54 @@ struct dnotify_struct { struct dnotify_struct * dn_next; - unsigned long dn_mask; /* Events to be notified - see linux/fcntl.h */ + unsigned long dn_mask; int dn_fd; struct file * dn_filp; fl_owner_t dn_owner; }; +#ifdef __KERNEL__ + +#include + +#ifdef CONFIG_DNOTIFY + extern void __inode_dir_notify(struct inode *, unsigned long); -extern void dnotify_flush(struct file *filp, fl_owner_t id); +extern void dnotify_flush(struct file *, fl_owner_t); extern int fcntl_dirnotify(int, struct file *, unsigned long); -void dnotify_parent(struct dentry *dentry, unsigned long event); +extern void dnotify_parent(struct dentry *, unsigned long); static inline void inode_dir_notify(struct inode *inode, unsigned long event) { - if ((inode)->i_dnotify_mask & (event)) + if (inode->i_dnotify_mask & (event)) __inode_dir_notify(inode, event); } + +#else + +static inline void __inode_dir_notify(struct inode *inode, unsigned long event) +{ +} + +static inline void dnotify_flush(struct file *filp, fl_owner_t id) +{ +} + +static inline int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg) +{ + return -EINVAL; +} + +static inline void dnotify_parent(struct dentry *dentry, unsigned long event) +{ +} + +static inline void inode_dir_notify(struct inode *inode, unsigned long event) +{ +} + +#endif /* CONFIG_DNOTIFY */ + +#endif /* __KERNEL __ */ + +#endif /* _LINUX_DNOTIFY_H */ diff -puN include/linux/fs.h~make-dnotify-a-configure-time-option include/linux/fs.h --- 25/include/linux/fs.h~make-dnotify-a-configure-time-option 2004-10-26 01:27:19.934869352 -0700 +++ 25-akpm/include/linux/fs.h 2004-10-26 01:27:19.943867984 -0700 @@ -61,7 +61,11 @@ struct inodes_stat_t { }; extern struct inodes_stat_t inodes_stat; -extern int leases_enable, dir_notify_enable, lease_break_time; +extern int leases_enable, lease_break_time; + +#ifdef CONFIG_DNOTIFY +extern int dir_notify_enable; +#endif #define NR_FILE 8192 /* this can well be larger on a larger system */ #define NR_RESERVED_FILES 10 /* reserved for root */ @@ -469,8 +473,10 @@ struct inode { __u32 i_generation; +#ifdef CONFIG_DNOTIFY unsigned long i_dnotify_mask; /* Directory notify events */ struct dnotify_struct *i_dnotify; /* for directory notifications */ +#endif unsigned long i_state; unsigned long dirtied_when; /* jiffies of first dirtying */ diff -puN kernel/sysctl.c~make-dnotify-a-configure-time-option kernel/sysctl.c --- 25/kernel/sysctl.c~make-dnotify-a-configure-time-option 2004-10-26 01:27:19.936869048 -0700 +++ 25-akpm/kernel/sysctl.c 2004-10-26 01:27:19.945867680 -0700 @@ -902,6 +902,7 @@ static ctl_table fs_table[] = { .mode = 0644, .proc_handler = &proc_dointvec, }, +#ifdef CONFIG_DNOTIFY { .ctl_name = FS_DIR_NOTIFY, .procname = "dir-notify-enable", @@ -910,6 +911,7 @@ static ctl_table fs_table[] = { .mode = 0644, .proc_handler = &proc_dointvec, }, +#endif { .ctl_name = FS_LEASE_TIME, .procname = "lease-break-time", _