* This does the actual work of updating an inodes time or version.  Must have
  * had called mnt_want_write() before calling this.
  */
-static int update_time(struct inode *inode, struct timespec64 *time, int flags)
+int inode_update_time(struct inode *inode, struct timespec64 *time, int flags)
 {
        if (inode->i_op->update_time)
                return inode->i_op->update_time(inode, time, flags);
        return generic_update_time(inode, time, flags);
 }
+EXPORT_SYMBOL(inode_update_time);
 
 /**
  *     atime_needs_update      -       update the access time
         * of the fs read only, e.g. subvolumes in Btrfs.
         */
        now = current_time(inode);
-       update_time(inode, &now, S_ATIME);
+       inode_update_time(inode, &now, S_ATIME);
        __mnt_drop_write(mnt);
 skip_update:
        sb_end_write(inode->i_sb);
        if (__mnt_want_write_file(file))
                return 0;
 
-       ret = update_time(inode, &now, sync_it);
+       ret = inode_update_time(inode, &now, sync_it);
        __mnt_drop_write_file(file);
 
        return ret;
 
 
 extern bool atime_needs_update(const struct path *, struct inode *);
 extern void touch_atime(const struct path *);
+int inode_update_time(struct inode *inode, struct timespec64 *time, int flags);
+
 static inline void file_accessed(struct file *file)
 {
        if (!(file->f_flags & O_NOATIME))