Signed-off-by: Yan, Zheng <zyan@redhat.com>
// 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);
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;
// 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());
}