]> nv-tegra.nvidia Code Review - linux-4.9.git/commitdiff
ANDROID: fsnotify: Notify lower fs of open
authorDaniel Rosenberg <drosen@google.com>
Thu, 1 Nov 2018 08:39:23 +0000 (16:39 +0800)
committermobile promotions <svcmobile_promotions@nvidia.com>
Wed, 7 Nov 2018 18:18:44 +0000 (10:18 -0800)
If the filesystem being watched supports d_canonical_path,
notify the lower filesystem of the open as well.

Bug: 70706497
Bug 200451922

Change-Id: I2b1739e068afbaf5eb39950516072bff8345ebfe
Signed-off-by: Daniel Rosenberg <drosen@google.com>
Reviewed-on: https://git-master.nvidia.com/r/1941034
Reviewed-by: Robert Huang (SW-TEGRA) <robhuang@nvidia.com>
Tested-by: Robert Huang (SW-TEGRA) <robhuang@nvidia.com>
Reviewed-by: Eric Zhang (SW-TEGRA) <ericz@nvidia.com>
Tested-by: Eric Zhang (SW-TEGRA) <ericz@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Daniel Fu <danifu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
include/linux/fsnotify.h

index e5f03a4d8430818787ec4255929f51aa23aeeb79..7cc3f7b3ea2db4303363d6c81171cc4ebef6071c 100644 (file)
@@ -213,12 +213,21 @@ static inline void fsnotify_modify(struct file *file)
 static inline void fsnotify_open(struct file *file)
 {
        struct path *path = &file->f_path;
+       struct path lower_path;
        struct inode *inode = path->dentry->d_inode;
        __u32 mask = FS_OPEN;
 
        if (S_ISDIR(inode->i_mode))
                mask |= FS_ISDIR;
 
+       if (path->dentry->d_op && path->dentry->d_op->d_canonical_path) {
+               path->dentry->d_op->d_canonical_path(path, &lower_path);
+               fsnotify_parent(&lower_path, NULL, mask);
+               fsnotify(lower_path.dentry->d_inode, mask, &lower_path,
+                                               FSNOTIFY_EVENT_PATH, NULL, 0);
+
+               path_put(&lower_path);
+       }
        fsnotify_parent(path, NULL, mask);
        fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0);
 }