A clone that comes into existence via promotion takes an entirely
different path than a typical clone (which comes into existence via a
CLONE op in make_writeable()). Make sure snap_mapper is updated
accordingly.
Signed-off-by: Sage Weil <sage@inktank.com>
}
set<snapid_t> _snaps(snaps.begin(), snaps.end());
- if (i->is_clone()) {
+ if (i->is_clone() || i->is_promote()) {
snap_mapper.add_oid(
i->soid,
_snaps,
if (soid.snap < CEPH_NOSNAP) {
dout(20) << __func__ << " encoding snaps " << ctx->new_obs.oi.snaps << dendl;
::encode(ctx->new_obs.oi.snaps, ctx->log.back().snaps);
+
+ OSDriver::OSTransaction _t(osdriver.get_transaction(&(ctx->local_t)));
+ set<snapid_t> _snaps(ctx->new_obs.oi.snaps.begin(),
+ ctx->new_obs.oi.snaps.end());
+ snap_mapper.add_oid(soid, _snaps, &_t);
}
// apply new object state.