ceph: fix dentry leaks
[firefly-linux-kernel-4.4.55.git] / fs / ceph / inode.c
index f88a0f059dc8e24f677755c03905dba659181e03..be3af18e4cf1369196c56179f855b93081cf1a92 100644 (file)
@@ -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;