static void remove_watch(struct inotify_watch *watch, struct inotify_handle *ih)
 {
        remove_watch_no_event(watch, ih);
-       ih->in_ops->handle_event(watch, watch->wd, IN_IGNORED, 0, NULL);
+       ih->in_ops->handle_event(watch, watch->wd, IN_IGNORED, 0, NULL, NULL);
 }
 
 /* Kernel API for producing events */
  * @mask: event mask describing this event
  * @cookie: cookie for synchronization, or zero
  * @name: filename, if any
+ * @n_inode: inode associated with name
  */
 void inotify_inode_queue_event(struct inode *inode, u32 mask, u32 cookie,
-                              const char *name)
+                              const char *name, struct inode *n_inode)
 {
        struct inotify_watch *watch, *next;
 
                        mutex_lock(&ih->mutex);
                        if (watch_mask & IN_ONESHOT)
                                remove_watch_no_event(watch, ih);
-                       ih->in_ops->handle_event(watch, watch->wd, mask, cookie, name);
+                       ih->in_ops->handle_event(watch, watch->wd, mask, cookie,
+                                                name, n_inode);
                        mutex_unlock(&ih->mutex);
                }
        }
        if (inotify_inode_watched(inode)) {
                dget(parent);
                spin_unlock(&dentry->d_lock);
-               inotify_inode_queue_event(inode, mask, cookie, name);
+               inotify_inode_queue_event(inode, mask, cookie, name,
+                                         dentry->d_inode);
                dput(parent);
        } else
                spin_unlock(&dentry->d_lock);
                        struct inotify_handle *ih= watch->ih;
                        mutex_lock(&ih->mutex);
                        ih->in_ops->handle_event(watch, watch->wd, IN_UNMOUNT, 0,
-                                                NULL);
+                                                NULL, NULL);
                        remove_watch(watch, ih);
                        mutex_unlock(&ih->mutex);
                }
 
 
        if (isdir)
                isdir = IN_ISDIR;
-       inotify_inode_queue_event(old_dir, IN_MOVED_FROM|isdir,cookie,old_name);
-       inotify_inode_queue_event(new_dir, IN_MOVED_TO|isdir, cookie, new_name);
+       inotify_inode_queue_event(old_dir, IN_MOVED_FROM|isdir,cookie,old_name,
+                                 source);
+       inotify_inode_queue_event(new_dir, IN_MOVED_TO|isdir, cookie, new_name,
+                                 source);
 
        if (target) {
-               inotify_inode_queue_event(target, IN_DELETE_SELF, 0, NULL);
+               inotify_inode_queue_event(target, IN_DELETE_SELF, 0, NULL, NULL);
                inotify_inode_is_dead(target);
        }
 
        if (source) {
-               inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL);
+               inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL);
        }
        audit_inode_child(old_name, source, old_dir->i_ino);
        audit_inode_child(new_name, target, new_dir->i_ino);
  */
 static inline void fsnotify_inoderemove(struct inode *inode)
 {
-       inotify_inode_queue_event(inode, IN_DELETE_SELF, 0, NULL);
+       inotify_inode_queue_event(inode, IN_DELETE_SELF, 0, NULL, NULL);
        inotify_inode_is_dead(inode);
 }
 
 static inline void fsnotify_create(struct inode *inode, struct dentry *dentry)
 {
        inode_dir_notify(inode, DN_CREATE);
-       inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name);
+       inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name,
+                                 dentry->d_inode);
        audit_inode_child(dentry->d_name.name, dentry->d_inode, inode->i_ino);
 }
 
 {
        inode_dir_notify(inode, DN_CREATE);
        inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, 
-                                 dentry->d_name.name);
+                                 dentry->d_name.name, dentry->d_inode);
        audit_inode_child(dentry->d_name.name, dentry->d_inode, inode->i_ino);
 }
 
 
        dnotify_parent(dentry, DN_ACCESS);
        inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name);
-       inotify_inode_queue_event(inode, mask, 0, NULL);
+       inotify_inode_queue_event(inode, mask, 0, NULL, NULL);
 }
 
 /*
 
        dnotify_parent(dentry, DN_MODIFY);
        inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name);
-       inotify_inode_queue_event(inode, mask, 0, NULL);
+       inotify_inode_queue_event(inode, mask, 0, NULL, NULL);
 }
 
 /*
                mask |= IN_ISDIR;
 
        inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name);
-       inotify_inode_queue_event(inode, mask, 0, NULL);        
+       inotify_inode_queue_event(inode, mask, 0, NULL, NULL);
 }
 
 /*
                mask |= IN_ISDIR;
 
        inotify_dentry_parent_queue_event(dentry, mask, 0, name);
-       inotify_inode_queue_event(inode, mask, 0, NULL);
+       inotify_inode_queue_event(inode, mask, 0, NULL, NULL);
 }
 
 /*
                mask |= IN_ISDIR;
 
        inotify_dentry_parent_queue_event(dentry, mask, 0, dentry->d_name.name);
-       inotify_inode_queue_event(inode, mask, 0, NULL);
+       inotify_inode_queue_event(inode, mask, 0, NULL, NULL);
 }
 
 /*
        if (in_mask) {
                if (S_ISDIR(inode->i_mode))
                        in_mask |= IN_ISDIR;
-               inotify_inode_queue_event(inode, in_mask, 0, NULL);
+               inotify_inode_queue_event(inode, in_mask, 0, NULL, NULL);
                inotify_dentry_parent_queue_event(dentry, in_mask, 0,
                                                  dentry->d_name.name);
        }
 
 
 struct inotify_operations {
        void (*handle_event)(struct inotify_watch *, u32, u32, u32,
-                            const char *);
+                            const char *, struct inode *);
        void (*destroy_watch)(struct inotify_watch *);
 };
 
 extern void inotify_d_instantiate(struct dentry *, struct inode *);
 extern void inotify_d_move(struct dentry *);
 extern void inotify_inode_queue_event(struct inode *, __u32, __u32,
-                                     const char *);
+                                     const char *, struct inode *);
 extern void inotify_dentry_parent_queue_event(struct dentry *, __u32, __u32,
                                              const char *);
 extern void inotify_unmount_inodes(struct list_head *);
 
 static inline void inotify_inode_queue_event(struct inode *inode,
                                             __u32 mask, __u32 cookie,
-                                            const char *filename)
+                                            const char *filename,
+                                            struct inode *n_inode)
 {
 }