@@ -1820,14 +1820,24 @@ static ssize_t cifs_read(struct file *file, char *read_data, size_t read_size,
int cifs_file_mmap(struct file *file, struct vm_area_struct *vma)
{
int rc, xid;
+ struct inode *inode = file->f_path.dentry->d_inode;
+ struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
xid = GetXid();
- rc = cifs_revalidate_file(file);
- if (rc) {
- cFYI(1, "Validation prior to mmap failed, error=%d", rc);
- FreeXid(xid);
- return rc;
+
+ if (!CIFS_I(inode)->clientCanCacheRead &&
+ ((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO) == 0))
+ invalidate_remote_inode(inode);
+ else {
+ rc = cifs_revalidate_file(file);
+ if (rc) {
+ cFYI(1, "Validation prior to mmap failed, error=%d",
+ rc);
+ FreeXid(xid);
+ return rc;
+ }
}
+
rc = generic_file_mmap(file, vma);
FreeXid(xid);
return rc;