]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: kill off inodes that get recovered but no longer have any parents
authorSage Weil <sage@newdream.net>
Mon, 20 Oct 2008 22:07:08 +0000 (15:07 -0700)
committerSage Weil <sage@newdream.net>
Mon, 20 Oct 2008 22:07:08 +0000 (15:07 -0700)
src/mds/MDCache.cc

index 73f29dd3e4a142fd90ff06f3c58c0e765b66993e..ef53596ca5081e09f62ccf8c2c6be086d74a900a 100644 (file)
@@ -3993,11 +3993,18 @@ void MDCache::_recovered(CInode *in, int r)
   file_recovering.erase(in);
   in->state_clear(CInode::STATE_RECOVERING);
 
-  // make sure this is in "newest" inode struct, and gets journaled
-  in->get_projected_inode()->size = in->inode.size;
-  mds->locker->check_inode_max_size(in, true, in->inode.size);
-
-  in->auth_unpin(this);
+  if (!in->parent && !in->projected_parent) {
+    dout(10) << " inode has no parents, killing it off" << dendl;
+    in->auth_unpin(this);
+    assert(in->get_num_ref() == 0);  // right?
+    remove_inode(in);
+  } else {
+    // make sure this is in "newest" inode struct, and gets journaled
+    in->get_projected_inode()->size = in->inode.size;
+    mds->locker->check_inode_max_size(in, true, in->inode.size);
+    
+    in->auth_unpin(this);
+  }
 
   do_file_recover();
 }