From: Jason Dillaman Date: Wed, 25 Mar 2015 16:05:41 +0000 (-0400) Subject: librbd: move object map snapshot handling to ObjectMap class X-Git-Tag: v9.0.1~55^2~16 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ed2a1fcb164053d6ec8d13f4fd7b1a53f0496c02;p=ceph.git librbd: move object map snapshot handling to ObjectMap class Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/ObjectMap.cc b/src/librbd/ObjectMap.cc index e75e2b2e9563..f4d520f7003d 100644 --- a/src/librbd/ObjectMap.cc +++ b/src/librbd/ObjectMap.cc @@ -278,7 +278,7 @@ void ObjectMap::rollback(uint64_t snap_id) { } } -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; @@ -310,6 +310,15 @@ void ObjectMap::snapshot(uint64_t snap_id) { } } +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)); diff --git a/src/librbd/ObjectMap.h b/src/librbd/ObjectMap.h index 03c260f625db..56b0c72f5517 100644 --- a/src/librbd/ObjectMap.h +++ b/src/librbd/ObjectMap.h @@ -48,7 +48,8 @@ public: 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; diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index ff5229fdceb4..af79d946586d 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -708,8 +708,8 @@ int invoke_async_request(ImageCtx *ictx, const std::string& request_type, } } - 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; @@ -1971,7 +1971,7 @@ reprotect_and_return_err: 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