V4L/DVB (3414): rename dvb_pll_tbmv30111in to dvb_pll_samsung_tbmv
[firefly-linux-kernel-4.4.55.git] / fs / inode.c
index e177769f3b41ab33828c3a6899f3700036314484..108138d4e909301ed1e6389bb3132127fdb9e4b4 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/cdev.h>
 #include <linux/bootmem.h>
 #include <linux/inotify.h>
+#include <linux/mount.h>
 
 /*
  * This is needed for the following functions:
@@ -1176,22 +1177,33 @@ sector_t bmap(struct inode * inode, sector_t block)
 EXPORT_SYMBOL(bmap);
 
 /**
- *     update_atime    -       update the access time
+ *     touch_atime     -       update the access time
+ *     @mnt: mount the inode is accessed on
  *     @inode: inode accessed
  *
  *     Update the accessed time on an inode and mark it for writeback.
  *     This function automatically handles read only file systems and media,
  *     as well as the "noatime" flag and inode specific "noatime" markers.
  */
-void update_atime(struct inode *inode)
+void touch_atime(struct vfsmount *mnt, struct dentry *dentry)
 {
+       struct inode *inode = dentry->d_inode;
        struct timespec now;
 
-       if (IS_NOATIME(inode))
+       if (IS_RDONLY(inode))
                return;
-       if (IS_NODIRATIME(inode) && S_ISDIR(inode->i_mode))
+
+       if ((inode->i_flags & S_NOATIME) ||
+           (inode->i_sb->s_flags & MS_NOATIME) ||
+           ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode)))
                return;
-       if (IS_RDONLY(inode))
+
+       /*
+        * We may have a NULL vfsmount when coming from NFSD
+        */
+       if (mnt &&
+           ((mnt->mnt_flags & MNT_NOATIME) ||
+            ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))))
                return;
 
        now = current_fs_time(inode->i_sb);
@@ -1201,7 +1213,7 @@ void update_atime(struct inode *inode)
        }
 }
 
-EXPORT_SYMBOL(update_atime);
+EXPORT_SYMBOL(touch_atime);
 
 /**
  *     file_update_time        -       update mtime and ctime time