ovl: cleanup ovl_update_time()
authorMiklos Szeredi <mszeredi@redhat.com>
Thu, 12 Apr 2018 10:04:50 +0000 (12:04 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 12 Apr 2018 10:04:50 +0000 (12:04 +0200)
No need to mess with an alias, the upperdentry can be retrieved directly
from the overlay inode.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/overlayfs/inode.c

index b3be0cf..29069f2 100644 (file)
@@ -380,24 +380,18 @@ int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags)
 
 int ovl_update_time(struct inode *inode, struct timespec *ts, int flags)
 {
-       struct dentry *alias;
-       struct path upperpath;
-
-       if (!(flags & S_ATIME))
-               return 0;
-
-       alias = d_find_any_alias(inode);
-       if (!alias)
-               return 0;
-
-       ovl_path_upper(alias, &upperpath);
-       if (upperpath.dentry) {
-               touch_atime(&upperpath);
-               inode->i_atime = d_inode(upperpath.dentry)->i_atime;
+       if (flags & S_ATIME) {
+               struct ovl_fs *ofs = inode->i_sb->s_fs_info;
+               struct path upperpath = {
+                       .mnt = ofs->upper_mnt,
+                       .dentry = ovl_upperdentry_dereference(OVL_I(inode)),
+               };
+
+               if (upperpath.dentry) {
+                       touch_atime(&upperpath);
+                       inode->i_atime = d_inode(upperpath.dentry)->i_atime;
+               }
        }
-
-       dput(alias);
-
        return 0;
 }