|
@@ -1738,6 +1738,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
|
nfs_inc_stats(inode, NFSIOS_ATTRINVALIDATE);
|
|
|
nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
|
|
|
nfsi->attrtimeo_timestamp = now;
|
|
|
+ /* Set barrier to be more recent than all outstanding updates */
|
|
|
nfsi->attr_gencount = nfs_inc_attr_generation_counter();
|
|
|
} else {
|
|
|
if (!time_in_range_open(now, nfsi->attrtimeo_timestamp, nfsi->attrtimeo_timestamp + nfsi->attrtimeo)) {
|
|
@@ -1745,6 +1746,9 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
|
|
|
nfsi->attrtimeo = NFS_MAXATTRTIMEO(inode);
|
|
|
nfsi->attrtimeo_timestamp = now;
|
|
|
}
|
|
|
+ /* Set the barrier to be more recent than this fattr */
|
|
|
+ if ((long)fattr->gencount - (long)nfsi->attr_gencount > 0)
|
|
|
+ nfsi->attr_gencount = fattr->gencount;
|
|
|
}
|
|
|
invalid &= ~NFS_INO_INVALID_ATTR;
|
|
|
/* Don't invalidate the data if we were to blame */
|