diff options
| -rw-r--r-- | fs/lockd/svclock.c | 8 | ||||
| -rw-r--r-- | fs/nfsd/nfs4acl.c | 9 |
2 files changed, 11 insertions, 6 deletions
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c index e066a3902973..ab798a88ec1d 100644 --- a/fs/lockd/svclock.c +++ b/fs/lockd/svclock.c | |||
| @@ -779,6 +779,7 @@ nlmsvc_grant_blocked(struct nlm_block *block) | |||
| 779 | struct nlm_file *file = block->b_file; | 779 | struct nlm_file *file = block->b_file; |
| 780 | struct nlm_lock *lock = &block->b_call->a_args.lock; | 780 | struct nlm_lock *lock = &block->b_call->a_args.lock; |
| 781 | int error; | 781 | int error; |
| 782 | loff_t fl_start, fl_end; | ||
| 782 | 783 | ||
| 783 | dprintk("lockd: grant blocked lock %p\n", block); | 784 | dprintk("lockd: grant blocked lock %p\n", block); |
| 784 | 785 | ||
| @@ -796,9 +797,16 @@ nlmsvc_grant_blocked(struct nlm_block *block) | |||
| 796 | } | 797 | } |
| 797 | 798 | ||
| 798 | /* Try the lock operation again */ | 799 | /* Try the lock operation again */ |
| 800 | /* vfs_lock_file() can mangle fl_start and fl_end, but we need | ||
| 801 | * them unchanged for the GRANT_MSG | ||
| 802 | */ | ||
| 799 | lock->fl.fl_flags |= FL_SLEEP; | 803 | lock->fl.fl_flags |= FL_SLEEP; |
| 804 | fl_start = lock->fl.fl_start; | ||
| 805 | fl_end = lock->fl.fl_end; | ||
| 800 | error = vfs_lock_file(file->f_file, F_SETLK, &lock->fl, NULL); | 806 | error = vfs_lock_file(file->f_file, F_SETLK, &lock->fl, NULL); |
| 801 | lock->fl.fl_flags &= ~FL_SLEEP; | 807 | lock->fl.fl_flags &= ~FL_SLEEP; |
| 808 | lock->fl.fl_start = fl_start; | ||
| 809 | lock->fl.fl_end = fl_end; | ||
| 802 | 810 | ||
| 803 | switch (error) { | 811 | switch (error) { |
| 804 | case 0: | 812 | case 0: |
diff --git a/fs/nfsd/nfs4acl.c b/fs/nfsd/nfs4acl.c index d3a587144222..d190e33d0ec2 100644 --- a/fs/nfsd/nfs4acl.c +++ b/fs/nfsd/nfs4acl.c | |||
| @@ -151,17 +151,15 @@ nfsd4_get_nfs4_acl(struct svc_rqst *rqstp, struct dentry *dentry, | |||
| 151 | pacl = posix_acl_from_mode(inode->i_mode, GFP_KERNEL); | 151 | pacl = posix_acl_from_mode(inode->i_mode, GFP_KERNEL); |
| 152 | if (IS_ERR(pacl)) | 152 | if (IS_ERR(pacl)) |
| 153 | return PTR_ERR(pacl); | 153 | return PTR_ERR(pacl); |
| 154 | /* allocate for worst case: one (deny, allow) pair each: */ | ||
| 155 | size += 2 * pacl->a_count; | ||
| 156 | } | 154 | } |
| 155 | /* allocate for worst case: one (deny, allow) pair each: */ | ||
| 156 | size += 2 * pacl->a_count; | ||
| 157 | 157 | ||
| 158 | if (S_ISDIR(inode->i_mode)) { | 158 | if (S_ISDIR(inode->i_mode)) { |
| 159 | flags = NFS4_ACL_DIR; | 159 | flags = NFS4_ACL_DIR; |
| 160 | dpacl = get_acl(inode, ACL_TYPE_DEFAULT); | 160 | dpacl = get_acl(inode, ACL_TYPE_DEFAULT); |
| 161 | if (dpacl) | 161 | if (dpacl) |
| 162 | size += 2 * dpacl->a_count; | 162 | size += 2 * dpacl->a_count; |
| 163 | } else { | ||
| 164 | dpacl = NULL; | ||
| 165 | } | 163 | } |
| 166 | 164 | ||
| 167 | *acl = nfs4_acl_new(size); | 165 | *acl = nfs4_acl_new(size); |
| @@ -170,8 +168,7 @@ nfsd4_get_nfs4_acl(struct svc_rqst *rqstp, struct dentry *dentry, | |||
| 170 | goto out; | 168 | goto out; |
| 171 | } | 169 | } |
| 172 | 170 | ||
| 173 | if (pacl) | 171 | _posix_to_nfsv4_one(pacl, *acl, flags & ~NFS4_ACL_TYPE_DEFAULT); |
| 174 | _posix_to_nfsv4_one(pacl, *acl, flags & ~NFS4_ACL_TYPE_DEFAULT); | ||
| 175 | 172 | ||
| 176 | if (dpacl) | 173 | if (dpacl) |
| 177 | _posix_to_nfsv4_one(dpacl, *acl, flags | NFS4_ACL_TYPE_DEFAULT); | 174 | _posix_to_nfsv4_one(dpacl, *acl, flags | NFS4_ACL_TYPE_DEFAULT); |
