|
@@ -1575,18 +1575,20 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
inode->i_version = fattr->change_attr;
|
|
inode->i_version = fattr->change_attr;
|
|
}
|
|
}
|
|
} else if (server->caps & NFS_CAP_CHANGE_ATTR)
|
|
} else if (server->caps & NFS_CAP_CHANGE_ATTR)
|
|
- invalid |= save_cache_validity;
|
|
|
|
|
|
+ nfsi->cache_validity |= save_cache_validity;
|
|
|
|
|
|
if (fattr->valid & NFS_ATTR_FATTR_MTIME) {
|
|
if (fattr->valid & NFS_ATTR_FATTR_MTIME) {
|
|
memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
|
|
memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
|
|
} else if (server->caps & NFS_CAP_MTIME)
|
|
} else if (server->caps & NFS_CAP_MTIME)
|
|
- invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
|
|
|
|
|
|
+ nfsi->cache_validity |= save_cache_validity &
|
|
|
|
+ (NFS_INO_INVALID_ATTR
|
|
| NFS_INO_REVAL_FORCED);
|
|
| NFS_INO_REVAL_FORCED);
|
|
|
|
|
|
if (fattr->valid & NFS_ATTR_FATTR_CTIME) {
|
|
if (fattr->valid & NFS_ATTR_FATTR_CTIME) {
|
|
memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
|
|
memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
|
|
} else if (server->caps & NFS_CAP_CTIME)
|
|
} else if (server->caps & NFS_CAP_CTIME)
|
|
- invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
|
|
|
|
|
|
+ nfsi->cache_validity |= save_cache_validity &
|
|
|
|
+ (NFS_INO_INVALID_ATTR
|
|
| NFS_INO_REVAL_FORCED);
|
|
| NFS_INO_REVAL_FORCED);
|
|
|
|
|
|
/* Check if our cached file size is stale */
|
|
/* Check if our cached file size is stale */
|
|
@@ -1608,7 +1610,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
(long long)new_isize);
|
|
(long long)new_isize);
|
|
}
|
|
}
|
|
} else
|
|
} else
|
|
- invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
|
|
|
|
|
|
+ nfsi->cache_validity |= save_cache_validity &
|
|
|
|
+ (NFS_INO_INVALID_ATTR
|
|
| NFS_INO_REVAL_PAGECACHE
|
|
| NFS_INO_REVAL_PAGECACHE
|
|
| NFS_INO_REVAL_FORCED);
|
|
| NFS_INO_REVAL_FORCED);
|
|
|
|
|
|
@@ -1616,7 +1619,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
if (fattr->valid & NFS_ATTR_FATTR_ATIME)
|
|
if (fattr->valid & NFS_ATTR_FATTR_ATIME)
|
|
memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime));
|
|
memcpy(&inode->i_atime, &fattr->atime, sizeof(inode->i_atime));
|
|
else if (server->caps & NFS_CAP_ATIME)
|
|
else if (server->caps & NFS_CAP_ATIME)
|
|
- invalid |= save_cache_validity & (NFS_INO_INVALID_ATIME
|
|
|
|
|
|
+ nfsi->cache_validity |= save_cache_validity &
|
|
|
|
+ (NFS_INO_INVALID_ATIME
|
|
| NFS_INO_REVAL_FORCED);
|
|
| NFS_INO_REVAL_FORCED);
|
|
|
|
|
|
if (fattr->valid & NFS_ATTR_FATTR_MODE) {
|
|
if (fattr->valid & NFS_ATTR_FATTR_MODE) {
|
|
@@ -1627,7 +1631,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
|
|
invalid |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL;
|
|
}
|
|
}
|
|
} else if (server->caps & NFS_CAP_MODE)
|
|
} else if (server->caps & NFS_CAP_MODE)
|
|
- invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
|
|
|
|
|
|
+ nfsi->cache_validity |= save_cache_validity &
|
|
|
|
+ (NFS_INO_INVALID_ATTR
|
|
| NFS_INO_INVALID_ACCESS
|
|
| NFS_INO_INVALID_ACCESS
|
|
| NFS_INO_INVALID_ACL
|
|
| NFS_INO_INVALID_ACL
|
|
| NFS_INO_REVAL_FORCED);
|
|
| NFS_INO_REVAL_FORCED);
|
|
@@ -1638,7 +1643,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
inode->i_uid = fattr->uid;
|
|
inode->i_uid = fattr->uid;
|
|
}
|
|
}
|
|
} else if (server->caps & NFS_CAP_OWNER)
|
|
} else if (server->caps & NFS_CAP_OWNER)
|
|
- invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
|
|
|
|
|
|
+ nfsi->cache_validity |= save_cache_validity &
|
|
|
|
+ (NFS_INO_INVALID_ATTR
|
|
| NFS_INO_INVALID_ACCESS
|
|
| NFS_INO_INVALID_ACCESS
|
|
| NFS_INO_INVALID_ACL
|
|
| NFS_INO_INVALID_ACL
|
|
| NFS_INO_REVAL_FORCED);
|
|
| NFS_INO_REVAL_FORCED);
|
|
@@ -1649,7 +1655,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
inode->i_gid = fattr->gid;
|
|
inode->i_gid = fattr->gid;
|
|
}
|
|
}
|
|
} else if (server->caps & NFS_CAP_OWNER_GROUP)
|
|
} else if (server->caps & NFS_CAP_OWNER_GROUP)
|
|
- invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
|
|
|
|
|
|
+ nfsi->cache_validity |= save_cache_validity &
|
|
|
|
+ (NFS_INO_INVALID_ATTR
|
|
| NFS_INO_INVALID_ACCESS
|
|
| NFS_INO_INVALID_ACCESS
|
|
| NFS_INO_INVALID_ACL
|
|
| NFS_INO_INVALID_ACL
|
|
| NFS_INO_REVAL_FORCED);
|
|
| NFS_INO_REVAL_FORCED);
|
|
@@ -1662,7 +1669,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
set_nlink(inode, fattr->nlink);
|
|
set_nlink(inode, fattr->nlink);
|
|
}
|
|
}
|
|
} else if (server->caps & NFS_CAP_NLINK)
|
|
} else if (server->caps & NFS_CAP_NLINK)
|
|
- invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR
|
|
|
|
|
|
+ nfsi->cache_validity |= save_cache_validity &
|
|
|
|
+ (NFS_INO_INVALID_ATTR
|
|
| NFS_INO_REVAL_FORCED);
|
|
| NFS_INO_REVAL_FORCED);
|
|
|
|
|
|
if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
|
|
if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) {
|