| From f87d928f6d98644d39809a013a22f981d39017cf Mon Sep 17 00:00:00 2001 |
| From: Trond Myklebust <trond.myklebust@primarydata.com> |
| Date: Sun, 24 Aug 2014 14:46:48 -0400 |
| Subject: NFSv3: Fix another acl regression |
| |
| From: Trond Myklebust <trond.myklebust@primarydata.com> |
| |
| commit f87d928f6d98644d39809a013a22f981d39017cf upstream. |
| |
| When creating a new object on the NFS server, we should not be sending |
| posix setacl requests unless the preceding posix_acl_create returned a |
| non-trivial acl. Doing so, causes Solaris servers in particular to |
| return an EINVAL. |
| |
| Fixes: 013cdf1088d72 (nfs: use generic posix ACL infrastructure,,,) |
| Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1132786 |
| Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfs/nfs3acl.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/fs/nfs/nfs3acl.c |
| +++ b/fs/nfs/nfs3acl.c |
| @@ -129,7 +129,10 @@ static int __nfs3_proc_setacls(struct in |
| .rpc_argp = &args, |
| .rpc_resp = &fattr, |
| }; |
| - int status; |
| + int status = 0; |
| + |
| + if (acl == NULL && (!S_ISDIR(inode->i_mode) || dfacl == NULL)) |
| + goto out; |
| |
| status = -EOPNOTSUPP; |
| if (!nfs_server_capable(inode, NFS_CAP_ACLS)) |