diff options
Diffstat (limited to 'fs/nfsd/nfs3acl.c')
-rw-r--r-- | fs/nfsd/nfs3acl.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/fs/nfsd/nfs3acl.c b/fs/nfsd/nfs3acl.c index 01df4cd7c753..0c890347cde3 100644 --- a/fs/nfsd/nfs3acl.c +++ b/fs/nfsd/nfs3acl.c | |||
@@ -95,22 +95,20 @@ static __be32 nfsd3_proc_setacl(struct svc_rqst * rqstp, | |||
95 | goto out; | 95 | goto out; |
96 | 96 | ||
97 | inode = d_inode(fh->fh_dentry); | 97 | inode = d_inode(fh->fh_dentry); |
98 | if (!IS_POSIXACL(inode) || !inode->i_op->set_acl) { | ||
99 | error = -EOPNOTSUPP; | ||
100 | goto out_errno; | ||
101 | } | ||
102 | 98 | ||
103 | error = fh_want_write(fh); | 99 | error = fh_want_write(fh); |
104 | if (error) | 100 | if (error) |
105 | goto out_errno; | 101 | goto out_errno; |
106 | 102 | ||
107 | error = inode->i_op->set_acl(inode, argp->acl_access, ACL_TYPE_ACCESS); | 103 | fh_lock(fh); |
104 | |||
105 | error = set_posix_acl(inode, ACL_TYPE_ACCESS, argp->acl_access); | ||
108 | if (error) | 106 | if (error) |
109 | goto out_drop_write; | 107 | goto out_drop_lock; |
110 | error = inode->i_op->set_acl(inode, argp->acl_default, | 108 | error = set_posix_acl(inode, ACL_TYPE_DEFAULT, argp->acl_default); |
111 | ACL_TYPE_DEFAULT); | ||
112 | 109 | ||
113 | out_drop_write: | 110 | out_drop_lock: |
111 | fh_unlock(fh); | ||
114 | fh_drop_write(fh); | 112 | fh_drop_write(fh); |
115 | out_errno: | 113 | out_errno: |
116 | nfserr = nfserrno(error); | 114 | nfserr = nfserrno(error); |