From 9fd9096d60399ada1c13b9e8f93c4c4ac1710f0d Mon Sep 17 00:00:00 2001 From: sageweil Date: Tue, 29 May 2007 01:11:04 +0000 Subject: [PATCH] * clear dirfrag dirty bit when closing/purging git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1384 29311d96-e01e-0410-9327-a35deaab8ce9 --- trunk/ceph/mds/CInode.cc | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/trunk/ceph/mds/CInode.cc b/trunk/ceph/mds/CInode.cc index 79555575482c9..91f7b0b338dbf 100644 --- a/trunk/ceph/mds/CInode.cc +++ b/trunk/ceph/mds/CInode.cc @@ -218,12 +218,24 @@ CDir *CInode::add_dirfrag(CDir *dir) void CInode::close_dirfrag(frag_t fg) { + dout(14) << "close_dirfrag " << fg << endl; assert(dirfrags.count(fg)); - dirfrags[fg]->remove_null_dentries(); + CDir *dir = dirfrags[fg]; + dir->remove_null_dentries(); - assert(dirfrags[fg]->get_num_ref() == 0); - delete dirfrags[fg]; + // clear dirty flag + if (dir->is_dirty()) + dir->mark_clean(); + + // dump any remaining dentries, for debugging purposes + for (map::iterator p = dir->items.begin(); + p != dir->items.end(); + ++p) + dout(14) << "close_dirfrag LEFTOVER dn " << *p->second << endl; + + assert(dir->get_num_ref() == 0); + delete dir; dirfrags.erase(fg); } -- 2.39.5