From: Jason Dillaman Date: Wed, 8 Jun 2016 14:12:04 +0000 (-0400) Subject: librbd: quickly check for duplicate snap name upon create X-Git-Tag: v11.0.0~243^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F9594%2Fhead;p=ceph.git librbd: quickly check for duplicate snap name upon create During journal replay, quickly check for a duplicate snap name before allocating a snapshot sequence from the OSDs and reverting due to the duplicate name. Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/Operations.cc b/src/librbd/Operations.cc index 64b59e6154f3..f19ebf2b8911 100644 --- a/src/librbd/Operations.cc +++ b/src/librbd/Operations.cc @@ -673,6 +673,14 @@ void Operations::execute_snap_create(const char *snap_name, ldout(cct, 5) << this << " " << __func__ << ": snap_name=" << snap_name << dendl; + m_image_ctx.snap_lock.get_read(); + if (m_image_ctx.get_snap_id(snap_name) != CEPH_NOSNAP) { + m_image_ctx.snap_lock.put_read(); + on_finish->complete(-EEXIST); + return; + } + m_image_ctx.snap_lock.put_read(); + operation::SnapshotCreateRequest *req = new operation::SnapshotCreateRequest( m_image_ctx, new C_NotifyUpdate(m_image_ctx, on_finish), snap_name,