diff options
Diffstat (limited to 'fs/nfsd/nfs2acl.c')
-rw-r--r-- | fs/nfsd/nfs2acl.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/fs/nfsd/nfs2acl.c b/fs/nfsd/nfs2acl.c index 1580ea6fd64d..d08cd88155c7 100644 --- a/fs/nfsd/nfs2acl.c +++ b/fs/nfsd/nfs2acl.c | |||
@@ -104,22 +104,21 @@ static __be32 nfsacld_proc_setacl(struct svc_rqst * rqstp, | |||
104 | goto out; | 104 | goto out; |
105 | 105 | ||
106 | inode = d_inode(fh->fh_dentry); | 106 | inode = d_inode(fh->fh_dentry); |
107 | if (!IS_POSIXACL(inode) || !inode->i_op->set_acl) { | ||
108 | error = -EOPNOTSUPP; | ||
109 | goto out_errno; | ||
110 | } | ||
111 | 107 | ||
112 | error = fh_want_write(fh); | 108 | error = fh_want_write(fh); |
113 | if (error) | 109 | if (error) |
114 | goto out_errno; | 110 | goto out_errno; |
115 | 111 | ||
116 | error = inode->i_op->set_acl(inode, argp->acl_access, ACL_TYPE_ACCESS); | 112 | fh_lock(fh); |
113 | |||
114 | error = set_posix_acl(inode, ACL_TYPE_ACCESS, argp->acl_access); | ||
117 | if (error) | 115 | if (error) |
118 | goto out_drop_write; | 116 | goto out_drop_lock; |
119 | error = inode->i_op->set_acl(inode, argp->acl_default, | 117 | error = set_posix_acl(inode, ACL_TYPE_DEFAULT, argp->acl_default); |
120 | ACL_TYPE_DEFAULT); | ||
121 | if (error) | 118 | if (error) |
122 | goto out_drop_write; | 119 | goto out_drop_lock; |
120 | |||
121 | fh_unlock(fh); | ||
123 | 122 | ||
124 | fh_drop_write(fh); | 123 | fh_drop_write(fh); |
125 | 124 | ||
@@ -131,7 +130,8 @@ out: | |||
131 | posix_acl_release(argp->acl_access); | 130 | posix_acl_release(argp->acl_access); |
132 | posix_acl_release(argp->acl_default); | 131 | posix_acl_release(argp->acl_default); |
133 | return nfserr; | 132 | return nfserr; |
134 | out_drop_write: | 133 | out_drop_lock: |
134 | fh_unlock(fh); | ||
135 | fh_drop_write(fh); | 135 | fh_drop_write(fh); |
136 | out_errno: | 136 | out_errno: |
137 | nfserr = nfserrno(error); | 137 | nfserr = nfserrno(error); |