浏览代码

ceph: fix dentry leaks

Signed-off-by: Yan, Zheng <zyan@redhat.com>
Yan, Zheng 10 年之前
父节点
当前提交
5cba372c0f
共有 2 个文件被更改,包括 6 次插入3 次删除
  1. 1 0
      fs/ceph/dir.c
  2. 5 3
      fs/ceph/inode.c

+ 1 - 0
fs/ceph/dir.c

@@ -676,6 +676,7 @@ int ceph_handle_notrace_create(struct inode *dir, struct dentry *dentry)
 		 */
 		BUG_ON(!result->d_inode);
 		d_instantiate(dentry, result->d_inode);
+		d_drop(result);
 		return 0;
 	}
 	return PTR_ERR(result);

+ 5 - 3
fs/ceph/inode.c

@@ -1449,12 +1449,14 @@ retry_lookup:
 		}
 
 		if (!dn->d_inode) {
-			dn = splice_dentry(dn, in, NULL);
-			if (IS_ERR(dn)) {
-				err = PTR_ERR(dn);
+			struct dentry *realdn = splice_dentry(dn, in, NULL);
+			if (IS_ERR(realdn)) {
+				err = PTR_ERR(realdn);
+				d_drop(dn);
 				dn = NULL;
 				goto next_item;
 			}
+			dn = realdn;
 		}
 
 		di = dn->d_fsdata;