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: v10.2.2~13^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cb50679bad91fa1a0e360dca0331996b543fdadd;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 (cherry picked from commit 8374d45c7644666103f88c410a2b1b781f3a0cb8) --- diff --git a/src/librbd/Operations.cc b/src/librbd/Operations.cc index c523b912680..7766a1222f8 100644 --- a/src/librbd/Operations.cc +++ b/src/librbd/Operations.cc @@ -617,6 +617,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,