]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: don't clear COMPLETE flag when trimming null dentry
authorYan, Zheng <zyan@redhat.com>
Wed, 25 Mar 2015 08:15:44 +0000 (16:15 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 25 Mar 2015 10:20:39 +0000 (18:20 +0800)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/client/Client.cc

index a649f2276eb28042abd277bc98e0a027bc67302d..1927de52931ce0ef30a50044899d7cd828e62d86 100644 (file)
@@ -612,10 +612,13 @@ void Client::trim_dentry(Dentry *dn)
   ldout(cct, 15) << "trim_dentry unlinking dn " << dn->name 
                 << " in dir " << hex << dn->dir->parent_inode->ino 
                 << dendl;
-  dn->dir->release_count++;
-  if (dn->dir->parent_inode->flags & I_COMPLETE) {
-    ldout(cct, 10) << " clearing (I_COMPLETE|I_DIR_ORDERED) on " << *dn->dir->parent_inode << dendl;
-    dn->dir->parent_inode->flags &= ~(I_COMPLETE | I_DIR_ORDERED);
+  if (dn->inode) {
+    dn->dir->release_count++;
+    if (dn->dir->parent_inode->flags & I_COMPLETE) {
+      ldout(cct, 10) << " clearing (I_COMPLETE|I_DIR_ORDERED) on "
+                    << *dn->dir->parent_inode << dendl;
+      dn->dir->parent_inode->flags &= ~(I_COMPLETE | I_DIR_ORDERED);
+    }
   }
   unlink(dn, false, false);  // drop dir, drop dentry
 }