diff options
Diffstat (limited to 'fs/nfs/nfs4proc.c')
| -rw-r--r-- | fs/nfs/nfs4proc.c | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 6a653ffd8e4..4435e5e1f90 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -3361,6 +3361,8 @@ static ssize_t nfs4_proc_get_acl(struct inode *inode, void *buf, size_t buflen)  	ret = nfs_revalidate_inode(server, inode);  	if (ret < 0)  		return ret; +	if (NFS_I(inode)->cache_validity & NFS_INO_INVALID_ACL) +		nfs_zap_acl_cache(inode);  	ret = nfs4_read_cached_acl(inode, buf, buflen);  	if (ret != -ENOENT)  		return ret; @@ -3389,6 +3391,13 @@ static int __nfs4_proc_set_acl(struct inode *inode, const void *buf, size_t bufl  	nfs_inode_return_delegation(inode);  	buf_to_pages(buf, buflen, arg.acl_pages, &arg.acl_pgbase);  	ret = nfs4_call_sync(server, &msg, &arg, &res, 1); +	/* +	 * Acl update can result in inode attribute update. +	 * so mark the attribute cache invalid. +	 */ +	spin_lock(&inode->i_lock); +	NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATTR; +	spin_unlock(&inode->i_lock);  	nfs_access_zap_cache(inode);  	nfs_zap_acl_cache(inode);  	return ret;  |