{ Opt_ignore, "dev" },
        { Opt_ignore, "mand" },
        { Opt_ignore, "nomand" },
+       { Opt_ignore, "relatime" },
        { Opt_ignore, "_netdev" },
 
        { Opt_err, NULL }
 
        else
                cifs_dbg(FYI, "Bytes read %d\n", rc);
 
-       file_inode(file)->i_atime =
-               current_time(file_inode(file));
+       /* we do not want atime to be less than mtime, it broke some apps */
+       file_inode(file)->i_atime = current_time(file_inode(file));
+       if (timespec64_compare(&(file_inode(file)->i_atime), &(file_inode(file)->i_mtime)))
+               file_inode(file)->i_atime = file_inode(file)->i_mtime;
+       else
+               file_inode(file)->i_atime = current_time(file_inode(file));
 
        if (PAGE_SIZE > rc)
                memset(read_data + rc, 0, PAGE_SIZE - rc);
 
        cifs_revalidate_cache(inode, fattr);
 
        spin_lock(&inode->i_lock);
-       inode->i_atime = fattr->cf_atime;
+       /* we do not want atime to be less than mtime, it broke some apps */
+       if (timespec64_compare(&fattr->cf_atime, &fattr->cf_mtime))
+               inode->i_atime = fattr->cf_mtime;
+       else
+               inode->i_atime = fattr->cf_atime;
        inode->i_mtime = fattr->cf_mtime;
        inode->i_ctime = fattr->cf_ctime;
        inode->i_rdev = fattr->cf_rdev;