|
@@ -840,21 +840,35 @@ repeat:
|
|
|
mutex_lock(&kernfs_mutex);
|
|
|
|
|
|
list_for_each_entry(info, &kernfs_root(kn)->supers, node) {
|
|
|
+ struct kernfs_node *parent;
|
|
|
struct inode *inode;
|
|
|
- struct dentry *dentry;
|
|
|
|
|
|
+ /*
|
|
|
+ * We want fsnotify_modify() on @kn but as the
|
|
|
+ * modifications aren't originating from userland don't
|
|
|
+ * have the matching @file available. Look up the inodes
|
|
|
+ * and generate the events manually.
|
|
|
+ */
|
|
|
inode = ilookup(info->sb, kn->ino);
|
|
|
if (!inode)
|
|
|
continue;
|
|
|
|
|
|
- dentry = d_find_any_alias(inode);
|
|
|
- if (dentry) {
|
|
|
- fsnotify_parent(NULL, dentry, FS_MODIFY);
|
|
|
- fsnotify(inode, FS_MODIFY, inode, FSNOTIFY_EVENT_INODE,
|
|
|
- NULL, 0);
|
|
|
- dput(dentry);
|
|
|
+ parent = kernfs_get_parent(kn);
|
|
|
+ if (parent) {
|
|
|
+ struct inode *p_inode;
|
|
|
+
|
|
|
+ p_inode = ilookup(info->sb, parent->ino);
|
|
|
+ if (p_inode) {
|
|
|
+ fsnotify(p_inode, FS_MODIFY | FS_EVENT_ON_CHILD,
|
|
|
+ inode, FSNOTIFY_EVENT_INODE, kn->name, 0);
|
|
|
+ iput(p_inode);
|
|
|
+ }
|
|
|
+
|
|
|
+ kernfs_put(parent);
|
|
|
}
|
|
|
|
|
|
+ fsnotify(inode, FS_MODIFY, inode, FSNOTIFY_EVENT_INODE,
|
|
|
+ kn->name, 0);
|
|
|
iput(inode);
|
|
|
}
|
|
|
|