diff -uNr -X linux-2.6.15/Documentation/dontdiff linux-2.6.15/kernel/fork.c linux-2.6.15.4/kernel/fork.c --- linux-2.6.15/kernel/fork.c 2006-01-03 04:21:10.000000000 +0100 +++ linux-2.6.15.4/kernel/fork.c 2006-02-18 14:09:54.000000000 +0100 @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -1141,6 +1142,7 @@ write_unlock_irq(&tasklist_lock); proc_fork_connector(p); cpuset_fork(p); + proc_root_notify(pid); retval = 0; fork_out: --- linux-2.6.15/include/linux/proc_fs.h 2006-01-03 04:21:10.000000000 +0100 +++ linux-2.6.15.4/include/linux/proc_fs.h 2006-02-18 13:55:52.000000000 +0100 @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include /* @@ -194,6 +196,13 @@ remove_proc_entry(name,proc_net); } +static inline void proc_root_notify (pid_t pid) +{ + char buf[20]; + snprintf (buf, sizeof (buf), "%d", pid); + fsnotify_mkdir (proc_mnt->mnt_root->d_inode, buf); +} + #else #define proc_root_driver NULL @@ -224,6 +233,8 @@ mode_t mode, struct proc_dir_entry *base, get_info_t *get_info) { return NULL; } +static inline void proc_root_notify (pid_t pid) {} + struct tty_driver; static inline void proc_tty_register_driver(struct tty_driver *driver) {}; static inline void proc_tty_unregister_driver(struct tty_driver *driver) {}; diff -uNr -X linux-2.6.15/Documentation/dontdiff linux-2.6.15/fs/proc/base.c linux-2.6.15.4/fs/proc/base.c --- linux-2.6.15/fs/proc/base.c 2006-01-03 04:21:10.000000000 +0100 +++ linux-2.6.15.4/fs/proc/base.c 2006-02-19 10:44:28.000000000 +0100 @@ -1945,6 +1945,7 @@ if(proc_dentry != NULL) { shrink_dcache_parent(proc_dentry); dput(proc_dentry); + fsnotify_nameremove (proc_dentry, 1); } }