while (count > 0) {
                clu_offset = (s32)(fid->rwoffset >> p_fs->cluster_size_bits);
-               clu = last_clu = fid->start_clu;
+               clu = fid->start_clu;
+               last_clu = fid->start_clu;
 
                if (fid->flags == 0x03) {
                        if ((clu_offset > 0) && (clu != CLUSTER_32(~0))) {
                        bool excl)
 {
        struct super_block *sb = dir->i_sb;
+       struct timespec64 curtime;
        struct inode *inode;
        struct file_id_t fid;
        loff_t i_pos;
                goto out;
        }
        INC_IVERSION(dir);
-       dir->i_ctime = dir->i_mtime = dir->i_atime = current_time(dir);
+       curtime = current_time(dir);
+       dir->i_ctime = curtime;
+       dir->i_mtime = curtime;
+       dir->i_atime = curtime;
        if (IS_DIRSYNC(dir))
                (void)exfat_sync_inode(dir);
        else
                goto out;
        }
        INC_IVERSION(inode);
-       inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
+       curtime = current_time(inode);
+       inode->i_mtime = curtime;
+       inode->i_atime = curtime;
+       inode->i_ctime = curtime;
        /*
         * timestamp is already written, so mark_inode_dirty() is unnecessary.
         */
 {
        struct inode *inode = dentry->d_inode;
        struct super_block *sb = dir->i_sb;
+       struct timespec64 curtime;
        int err;
 
        __lock_super(sb);
                goto out;
        }
        INC_IVERSION(dir);
-       dir->i_mtime = dir->i_atime = current_time(dir);
+       curtime = current_time(dir);
+       dir->i_mtime = curtime;
+       dir->i_atime = curtime;
        if (IS_DIRSYNC(dir))
                (void)exfat_sync_inode(dir);
        else
                mark_inode_dirty(dir);
 
        clear_nlink(inode);
-       inode->i_mtime = inode->i_atime = current_time(inode);
+       curtime = current_time(inode);
+       inode->i_mtime = curtime;
+       inode->i_atime = curtime;
        exfat_detach(inode);
        remove_inode_hash(inode);
 
                         const char *target)
 {
        struct super_block *sb = dir->i_sb;
+       struct timespec64 curtime;
        struct inode *inode;
        struct file_id_t fid;
        loff_t i_pos;
        }
 
        INC_IVERSION(dir);
-       dir->i_ctime = dir->i_mtime = dir->i_atime = current_time(dir);
+       curtime = current_time(dir);
+       dir->i_ctime = curtime;
+       dir->i_mtime = curtime;
+       dir->i_atime = curtime;
        if (IS_DIRSYNC(dir))
                (void)exfat_sync_inode(dir);
        else
                goto out;
        }
        INC_IVERSION(inode);
-       inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
+       curtime = current_time(inode);
+       inode->i_mtime = curtime;
+       inode->i_atime = curtime;
+       inode->i_ctime = curtime;
        /* timestamp is already written, so mark_inode_dirty() is unneeded. */
 
        EXFAT_I(inode)->target = kmemdup(target, len + 1, GFP_KERNEL);
 static int exfat_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 {
        struct super_block *sb = dir->i_sb;
+       struct timespec64 curtime;
        struct inode *inode;
        struct file_id_t fid;
        loff_t i_pos;
                goto out;
        }
        INC_IVERSION(dir);
-       dir->i_ctime = dir->i_mtime = dir->i_atime = current_time(dir);
+       curtime = current_time(dir);
+       dir->i_ctime = curtime;
+       dir->i_mtime = curtime;
+       dir->i_atime = curtime;
        if (IS_DIRSYNC(dir))
                (void)exfat_sync_inode(dir);
        else
                goto out;
        }
        INC_IVERSION(inode);
-       inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
+       curtime = current_time(inode);
+       inode->i_mtime = curtime;
+       inode->i_atime = curtime;
+       inode->i_ctime = curtime;
        /* timestamp is already written, so mark_inode_dirty() is unneeded. */
 
        dentry->d_time = GET_IVERSION(dentry->d_parent->d_inode);
 {
        struct inode *inode = dentry->d_inode;
        struct super_block *sb = dir->i_sb;
+       struct timespec64 curtime;
        int err;
 
        __lock_super(sb);
                goto out;
        }
        INC_IVERSION(dir);
-       dir->i_mtime = dir->i_atime = current_time(dir);
+       curtime = current_time(dir);
+       dir->i_mtime = curtime;
+       dir->i_atime = curtime;
        if (IS_DIRSYNC(dir))
                (void)exfat_sync_inode(dir);
        else
        drop_nlink(dir);
 
        clear_nlink(inode);
-       inode->i_mtime = inode->i_atime = current_time(inode);
+       curtime = current_time(inode);
+       inode->i_mtime = curtime;
+       inode->i_atime = curtime;
        exfat_detach(inode);
        remove_inode_hash(inode);
 
 {
        struct inode *old_inode, *new_inode;
        struct super_block *sb = old_dir->i_sb;
+       struct timespec64 curtime;
        loff_t i_pos;
        int err;
 
                goto out;
        }
        INC_IVERSION(new_dir);
-       new_dir->i_ctime = new_dir->i_mtime = new_dir->i_atime =
-                               current_time(new_dir);
+       curtime = current_time(new_dir);
+       new_dir->i_ctime = curtime;
+       new_dir->i_mtime = curtime;
+       new_dir->i_atime = curtime;
+
        if (IS_DIRSYNC(new_dir))
                (void)exfat_sync_inode(new_dir);
        else
                        inc_nlink(new_dir);
        }
        INC_IVERSION(old_dir);
-       old_dir->i_ctime = old_dir->i_mtime = current_time(old_dir);
+       curtime = current_time(old_dir);
+       old_dir->i_ctime = curtime;
+       old_dir->i_mtime = curtime;
        if (IS_DIRSYNC(old_dir))
                (void)exfat_sync_inode(old_dir);
        else
 {
        struct address_space *mapping = inode->i_mapping;
        loff_t start = i_size_read(inode), count = size - i_size_read(inode);
+       struct timespec64 curtime;
        int err, err2;
 
        err = generic_cont_expand_simple(inode, size);
        if (err != 0)
                return err;
 
-       inode->i_ctime = inode->i_mtime = current_time(inode);
+       curtime = current_time(inode);
+       inode->i_ctime = curtime;
+       inode->i_mtime = curtime;
        mark_inode_dirty(inode);
 
        if (IS_SYNC(inode)) {
        struct super_block *sb = inode->i_sb;
        struct exfat_sb_info *sbi = EXFAT_SB(sb);
        struct fs_info_t *p_fs = &sbi->fs_info;
+       struct timespec64 curtime;
        int err;
 
        __lock_super(sb);
        if (err)
                goto out;
 
-       inode->i_ctime = inode->i_mtime = current_time(inode);
+       curtime = current_time(inode);
+       inode->i_ctime = curtime;
+       inode->i_mtime = curtime;
        if (IS_DIRSYNC(inode))
                (void)exfat_sync_inode(inode);
        else
 {
        struct inode *inode = mapping->host;
        struct file_id_t *fid = &(EXFAT_I(inode)->fid);
+       struct timespec64 curtime;
        int err;
 
        err = generic_write_end(file, mapping, pos, len, copied, pagep, fsdata);
                exfat_write_failed(mapping, pos + len);
 
        if (!(err < 0) && !(fid->attr & ATTR_ARCHIVE)) {
-               inode->i_mtime = inode->i_ctime = current_time(inode);
+               curtime = current_time(inode);
+               inode->i_mtime = curtime;
+               inode->i_ctime = curtime;
                fid->attr |= ATTR_ARCHIVE;
                mark_inode_dirty(inode);
        }
 
        opts->fs_uid = current_uid();
        opts->fs_gid = current_gid();
-       opts->fs_fmask = opts->fs_dmask = current->fs->umask;
+       opts->fs_fmask = current->fs->umask;
+       opts->fs_dmask = current->fs->umask;
        opts->allow_utime = U16_MAX;
        opts->codepage = exfat_default_codepage;
        opts->iocharset = exfat_default_iocharset;
        struct super_block *sb = inode->i_sb;
        struct exfat_sb_info *sbi = EXFAT_SB(sb);
        struct fs_info_t *p_fs = &sbi->fs_info;
+       struct timespec64 curtime;
        struct dir_entry_t info;
 
        EXFAT_I(inode)->fid.dir.dir = p_fs->root_dir;
        EXFAT_I(inode)->mmu_private = i_size_read(inode);
 
        exfat_save_attr(inode, ATTR_SUBDIR);
-       inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
+       curtime = current_time(inode);
+       inode->i_mtime = curtime;
+       inode->i_atime = curtime;
+       inode->i_ctime = curtime;
        set_nlink(inode, info.NumSubdirs + 2);
 
        return 0;