From: Yan, Zheng Date: Tue, 10 Mar 2015 11:13:30 +0000 (+0800) Subject: mds: fix purging snapshotted stray inode X-Git-Tag: v9.0.0~150^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1bb4a9df6011e33de5ece7189a4c129a959ab023;p=ceph.git mds: fix purging snapshotted stray inode If stray inode has no snapshot data, it's OK to purge it even if it's still referenced by some snapsthots. This is because seperate snap inodes were created for snapshots. Signed-off-by: Yan, Zheng --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index d7dbf219060a..2b5ee948d0c0 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -9012,6 +9012,7 @@ void MDCache::eval_stray(CDentry *dn, bool delay) !in->snaprealm->open_parents(new C_MDC_EvalStray(this, dn))) return; in->snaprealm->prune_past_parents(); + in->purge_stale_snap_data(in->snaprealm->get_snaps()); } if (in->is_dir()) { if (in->snaprealm && in->snaprealm->has_past_parents()) { @@ -9056,7 +9057,9 @@ void MDCache::eval_stray(CDentry *dn, bool delay) num_strays_delayed++; logger->set(l_mdc_num_strays_delayed, num_strays_delayed); } - } else if (in->snaprealm && in->snaprealm->has_past_parents()) { + // don't purge multiversion inode with snap data + } else if (in->snaprealm && in->snaprealm->has_past_parents() && + !in->old_inodes.empty()) { assert(!in->is_dir()); dout(20) << " file has past parents " << in->snaprealm->srnode.past_parents << dendl; if (in->is_file() && in->get_projected_inode()->size > 0)