}
}
-void ObjectMap::snapshot(uint64_t snap_id) {
+void ObjectMap::snapshot_add(uint64_t snap_id) {
assert(m_image_ctx.snap_lock.is_wlocked());
if ((m_image_ctx.features & RBD_FEATURE_OBJECT_MAP) == 0) {
return;
}
}
+int ObjectMap::snapshot_remove(uint64_t snap_id) {
+ std::string oid(object_map_name(m_image_ctx.id, snap_id));
+ int r = m_image_ctx.md_ctx.remove(oid);
+ if (r < 0 && r != -ENOENT) {
+ return r;
+ }
+ return 0;
+}
+
void ObjectMap::aio_save(Context *on_finish)
{
assert(m_image_ctx.test_features(RBD_FEATURE_OBJECT_MAP));
void refresh(uint64_t snap_id);
void rollback(uint64_t snap_id);
- void snapshot(uint64_t snap_id);
+ void snapshot_add(uint64_t snap_id);
+ int snapshot_remove(uint64_t snap_id);
bool enabled() const;
}
}
- r = ictx->md_ctx.remove(ObjectMap::object_map_name(ictx->id, snap_id));
- if (r < 0 && r != -ENOENT) {
+ r = ictx->object_map.snapshot_remove(snap_id);
+ if (r < 0) {
lderr(ictx->cct) << "snap_remove: failed to remove snapshot object map"
<< dendl;
return 0;
RWLock::WLocker l(ictx->snap_lock);
if (!ictx->old_format) {
- ictx->object_map.snapshot(snap_id);
+ ictx->object_map.snapshot_add(snap_id);
if (lock_owner) {
// immediately start using the new snap context if we
// own the exclusive lock