From cb50679bad91fa1a0e360dca0331996b543fdadd Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Wed, 8 Jun 2016 10:12:04 -0400 Subject: [PATCH] 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) --- src/librbd/Operations.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/librbd/Operations.cc b/src/librbd/Operations.cc index c523b912680d3..7766a1222f865 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, -- 2.39.5