diff options
author | Sage Weil <sage@inktank.com> | 2014-01-31 19:25:25 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-31 20:14:06 +0400 |
commit | 77516dc92a14bb3853df959c0cb3ef51e659f5af (patch) | |
tree | 57f75022e461782f61b28280c6f12c602b19d398 /fs | |
parent | e7651b819e90da924991d727d3c007200a18670d (diff) | |
download | linux-77516dc92a14bb3853df959c0cb3ef51e659f5af.tar.xz |
ceph: fix missing dput in ceph_set_acl
Add matching dput() for d_find_alias(). Move d_find_alias() down a bit
at Julia's suggestion.
[ Introduced by commit 72466d0b92e0: "ceph: fix posix ACL hooks" ]
Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Ilya Dryomov <ilya.dryomov@inktank.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ceph/acl.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/ceph/acl.c b/fs/ceph/acl.c index 9ab312e49637..4c2d452c4bfc 100644 --- a/fs/ceph/acl.c +++ b/fs/ceph/acl.c @@ -107,7 +107,7 @@ int ceph_set_acl(struct inode *inode, struct posix_acl *acl, int type) char *value = NULL; struct iattr newattrs; umode_t new_mode = inode->i_mode, old_mode = inode->i_mode; - struct dentry *dentry = d_find_alias(inode); + struct dentry *dentry; if (acl) { ret = posix_acl_valid(acl); @@ -151,12 +151,13 @@ int ceph_set_acl(struct inode *inode, struct posix_acl *acl, int type) goto out_free; } + dentry = d_find_alias(inode); if (new_mode != old_mode) { newattrs.ia_mode = new_mode; newattrs.ia_valid = ATTR_MODE; ret = ceph_setattr(dentry, &newattrs); if (ret) - goto out_free; + goto out_dput; } if (value) @@ -170,11 +171,13 @@ int ceph_set_acl(struct inode *inode, struct posix_acl *acl, int type) newattrs.ia_valid = ATTR_MODE; ceph_setattr(dentry, &newattrs); } - goto out_free; + goto out_dput; } ceph_set_cached_acl(inode, type, acl); +out_dput: + dput(dentry); out_free: kfree(value); out: |