From: Yan, Zheng Date: Tue, 10 Mar 2015 03:58:31 +0000 (+0800) Subject: mds: purge stale snap data in CInode with snaprealm X-Git-Tag: v9.0.0~150^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=635d79251540aaecea40b40e9ba8bd7f8d3e4731;p=ceph.git mds: purge stale snap data in CInode with snaprealm Signed-off-by: Yan, Zheng --- diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index 58ef6ba18d28..4471c5740b46 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -2032,8 +2032,14 @@ void CDir::_encode_dentry(CDentry *dn, bufferlist& bl, // marker, name, inode, [symlink string] bl.append('I'); // inode - if (in->is_multiversion() && snaps && !in->snaprealm) - in->purge_stale_snap_data(*snaps); + if (in->is_multiversion()) { + if (!in->snaprealm) { + if (snaps) + in->purge_stale_snap_data(*snaps); + } else if (in->snaprealm->have_past_parents_open()) { + in->purge_stale_snap_data(in->snaprealm->get_snaps()); + } + } bufferlist snap_blob; in->encode_snap_blob(snap_blob); diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 6819875dc797..46eefad13531 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -946,6 +946,9 @@ void CInode::store(MDSInternalContextBase *fin) dout(10) << "store " << get_version() << dendl; assert(is_base()); + if (snaprealm) + purge_stale_snap_data(snaprealm->get_snaps()); + // encode bufferlist bl; string magic = CEPH_FS_ONDISK_MAGIC; diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 5fb40a561b38..d69a935b988d 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -7901,6 +7901,10 @@ void Server::_rmsnap_finish(MDRequestRef& mdr, CInode *diri, snapid_t snapid) // yay mdr->in[0] = diri; respond_to_request(mdr, 0); + + // purge snapshot data + if (diri->snaprealm->have_past_parents_open()) + diri->purge_stale_snap_data(diri->snaprealm->get_snaps()); }