diff options
Diffstat (limited to 'open-vm-tools/modules/linux/vmhgfs/fsutil.c')
-rw-r--r-- | open-vm-tools/modules/linux/vmhgfs/fsutil.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/open-vm-tools/modules/linux/vmhgfs/fsutil.c b/open-vm-tools/modules/linux/vmhgfs/fsutil.c index f298b8d7..2b1bcff5 100644 --- a/open-vm-tools/modules/linux/vmhgfs/fsutil.c +++ b/open-vm-tools/modules/linux/vmhgfs/fsutil.c @@ -702,15 +702,16 @@ HgfsChangeFileAttributes(struct inode *inode, // IN/OUT: Inode loff_t oldSize = compat_i_size_read(inode); inode->i_blocks = HgfsCalcBlockSize(attr->size); if (oldSize != attr->size) { + if (oldSize < attr->size) { + needInvalidate = TRUE; + } LOG(4, (KERN_DEBUG "VMware hgfs: HgfsChangeFileAttributes: new file " "size: %"FMT64"u, old file size: %Lu\n", attr->size, oldSize)); - needInvalidate = TRUE; + compat_i_size_write(inode, attr->size); } - compat_i_size_write(inode, attr->size); } else { LOG(4, (KERN_DEBUG "VMware hgfs: HgfsChangeFileAttributes: did not " "get file size\n")); - needInvalidate = TRUE; } if (attr->mask & HGFS_ATTR_VALID_ACCESS_TIME) { @@ -730,11 +731,9 @@ HgfsChangeFileAttributes(struct inode *inode, // IN/OUT: Inode LOG(4, (KERN_DEBUG "VMware hgfs: HgfsChangeFileAttributes: new mod " "time: %ld:%lu, old mod time: %ld:%lu\n", HGFS_PRINT_TIME(newTime), HGFS_PRINT_TIME(inode->i_mtime))); - needInvalidate = TRUE; } HGFS_SET_TIME(inode->i_mtime, attr->writeTime); } else { - needInvalidate = TRUE; LOG(4, (KERN_DEBUG "VMware hgfs: HgfsChangeFileAttributes: did not " "get mod time\n")); HGFS_SET_TIME(inode->i_mtime, HGFS_GET_CURRENT_TIME()); |