diff options
Diffstat (limited to 'fs/nfsd/nfs4acl.c')
| -rw-r--r-- | fs/nfsd/nfs4acl.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/fs/nfsd/nfs4acl.c b/fs/nfsd/nfs4acl.c index 6adabd6049b7..71292a0d6f09 100644 --- a/fs/nfsd/nfs4acl.c +++ b/fs/nfsd/nfs4acl.c | |||
| @@ -770,9 +770,6 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqstp, struct svc_fh *fhp, | |||
| 770 | dentry = fhp->fh_dentry; | 770 | dentry = fhp->fh_dentry; |
| 771 | inode = d_inode(dentry); | 771 | inode = d_inode(dentry); |
| 772 | 772 | ||
| 773 | if (!inode->i_op->set_acl || !IS_POSIXACL(inode)) | ||
| 774 | return nfserr_attrnotsupp; | ||
| 775 | |||
| 776 | if (S_ISDIR(inode->i_mode)) | 773 | if (S_ISDIR(inode->i_mode)) |
| 777 | flags = NFS4_ACL_DIR; | 774 | flags = NFS4_ACL_DIR; |
| 778 | 775 | ||
| @@ -782,16 +779,19 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqstp, struct svc_fh *fhp, | |||
| 782 | if (host_error < 0) | 779 | if (host_error < 0) |
| 783 | goto out_nfserr; | 780 | goto out_nfserr; |
| 784 | 781 | ||
| 785 | host_error = inode->i_op->set_acl(inode, pacl, ACL_TYPE_ACCESS); | 782 | fh_lock(fhp); |
| 783 | |||
| 784 | host_error = set_posix_acl(inode, ACL_TYPE_ACCESS, pacl); | ||
| 786 | if (host_error < 0) | 785 | if (host_error < 0) |
| 787 | goto out_release; | 786 | goto out_drop_lock; |
| 788 | 787 | ||
| 789 | if (S_ISDIR(inode->i_mode)) { | 788 | if (S_ISDIR(inode->i_mode)) { |
| 790 | host_error = inode->i_op->set_acl(inode, dpacl, | 789 | host_error = set_posix_acl(inode, ACL_TYPE_DEFAULT, dpacl); |
| 791 | ACL_TYPE_DEFAULT); | ||
| 792 | } | 790 | } |
| 793 | 791 | ||
| 794 | out_release: | 792 | out_drop_lock: |
| 793 | fh_unlock(fhp); | ||
| 794 | |||
| 795 | posix_acl_release(pacl); | 795 | posix_acl_release(pacl); |
| 796 | posix_acl_release(dpacl); | 796 | posix_acl_release(dpacl); |
| 797 | out_nfserr: | 797 | out_nfserr: |
