diff options
-rw-r--r-- | fs/nfs/inode.c | 5 | ||||
-rw-r--r-- | fs/nfs/nfs4proc.c | 1 |
2 files changed, 6 insertions, 0 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 6b0f7fe6bd1d..65d5ab45ddc5 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -853,6 +853,11 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr) | |||
853 | filemap_fdatawait(inode->i_mapping); | 853 | filemap_fdatawait(inode->i_mapping); |
854 | nfs_wb_all(inode); | 854 | nfs_wb_all(inode); |
855 | } | 855 | } |
856 | /* | ||
857 | * Return any delegations if we're going to change ACLs | ||
858 | */ | ||
859 | if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0) | ||
860 | nfs_inode_return_delegation(inode); | ||
856 | error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr); | 861 | error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr); |
857 | if (error == 0) | 862 | if (error == 0) |
858 | nfs_refresh_inode(inode, &fattr); | 863 | nfs_refresh_inode(inode, &fattr); |
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 3db1c9f0b09c..c10dcd12af51 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -2405,6 +2405,7 @@ static int nfs4_proc_set_acl(struct inode *inode, const void *buf, size_t buflen | |||
2405 | 2405 | ||
2406 | if (!nfs4_server_supports_acls(server)) | 2406 | if (!nfs4_server_supports_acls(server)) |
2407 | return -EOPNOTSUPP; | 2407 | return -EOPNOTSUPP; |
2408 | nfs_inode_return_delegation(inode); | ||
2408 | buf_to_pages(buf, buflen, arg.acl_pages, &arg.acl_pgbase); | 2409 | buf_to_pages(buf, buflen, arg.acl_pages, &arg.acl_pgbase); |
2409 | ret = rpc_call_sync(NFS_SERVER(inode)->client, &msg, 0); | 2410 | ret = rpc_call_sync(NFS_SERVER(inode)->client, &msg, 0); |
2410 | if (ret == 0) | 2411 | if (ret == 0) |