summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2013-06-04 11:19:26 +0800
committerSage Weil <sage@inktank.com>2013-06-03 20:53:09 -0700
commitb8f1cb978944a616b69150fdbb3a6b978d75b1dc (patch)
treeec01cabaae76e01732aeeba234458ff94ff10721
parent2d655bde8de9ad255d63718768558399cacd7068 (diff)
downloadceph-b8f1cb978944a616b69150fdbb3a6b978d75b1dc.tar.gz
mds: allow purging "dirty parent" stray inode
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
-rw-r--r--src/mds/MDCache.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc
index 3d879b2aad5..5d389e78d93 100644
--- a/src/mds/MDCache.cc
+++ b/src/mds/MDCache.cc
@@ -8588,7 +8588,7 @@ void MDCache::eval_stray(CDentry *dn)
dout(20) << " pending recovery" << dendl;
return; // don't mess with file size probing
}
- if (in->get_num_ref() > (int)in->is_dirty()) {
+ if (in->get_num_ref() > (int)in->is_dirty() + (int)in->is_dirty_parent()) {
dout(20) << " too many inode refs" << dendl;
return;
}
@@ -8869,6 +8869,9 @@ void MDCache::_purge_stray_logged(CDentry *dn, version_t pdv, LogSegment *ls)
// drop inode
if (in->is_dirty())
in->mark_clean();
+ if (in->is_dirty_parent())
+ in->clear_dirty_parent();
+
remove_inode(in);
// drop dentry?