|
@@ -1244,9 +1244,11 @@ static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fat
|
|
if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
|
|
if (fattr->valid & NFS_ATTR_FATTR_SIZE) {
|
|
cur_size = i_size_read(inode);
|
|
cur_size = i_size_read(inode);
|
|
new_isize = nfs_size_to_loff_t(fattr->size);
|
|
new_isize = nfs_size_to_loff_t(fattr->size);
|
|
- if (cur_size != new_isize && nfsi->nrequests == 0)
|
|
|
|
|
|
+ if (cur_size != new_isize)
|
|
invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
|
|
invalid |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE;
|
|
}
|
|
}
|
|
|
|
+ if (nfsi->nrequests != 0)
|
|
|
|
+ invalid &= ~NFS_INO_REVAL_PAGECACHE;
|
|
|
|
|
|
/* Have any file permissions changed? */
|
|
/* Have any file permissions changed? */
|
|
if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
|
|
if ((fattr->valid & NFS_ATTR_FATTR_MODE) && (inode->i_mode & S_IALLUGO) != (fattr->mode & S_IALLUGO))
|
|
@@ -1684,8 +1686,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
invalid |= NFS_INO_INVALID_ATTR
|
|
invalid |= NFS_INO_INVALID_ATTR
|
|
| NFS_INO_INVALID_DATA
|
|
| NFS_INO_INVALID_DATA
|
|
| NFS_INO_INVALID_ACCESS
|
|
| NFS_INO_INVALID_ACCESS
|
|
- | NFS_INO_INVALID_ACL
|
|
|
|
- | NFS_INO_REVAL_PAGECACHE;
|
|
|
|
|
|
+ | NFS_INO_INVALID_ACL;
|
|
if (S_ISDIR(inode->i_mode))
|
|
if (S_ISDIR(inode->i_mode))
|
|
nfs_force_lookup_revalidate(inode);
|
|
nfs_force_lookup_revalidate(inode);
|
|
inode->i_version = fattr->change_attr;
|
|
inode->i_version = fattr->change_attr;
|
|
@@ -1717,7 +1718,6 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
if ((nfsi->nrequests == 0) || new_isize > cur_isize) {
|
|
if ((nfsi->nrequests == 0) || new_isize > cur_isize) {
|
|
i_size_write(inode, new_isize);
|
|
i_size_write(inode, new_isize);
|
|
invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
|
|
invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA;
|
|
- invalid &= ~NFS_INO_REVAL_PAGECACHE;
|
|
|
|
}
|
|
}
|
|
dprintk("NFS: isize change on server for file %s/%ld "
|
|
dprintk("NFS: isize change on server for file %s/%ld "
|
|
"(%Ld to %Ld)\n",
|
|
"(%Ld to %Ld)\n",
|