From 0766734a24ab7fc56323f0d40b1c3745ea707878 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 21 May 2015 15:22:13 -0400 Subject: [PATCH] librbd: don't attempt to (re-)update the object map for CoW The AbstractWrite state machine has already taken care of updating the object map to the correct state. Signed-off-by: Jason Dillaman --- src/librbd/CopyupRequest.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/librbd/CopyupRequest.cc b/src/librbd/CopyupRequest.cc index 689c0cfac15f9..e8b6130f897d8 100644 --- a/src/librbd/CopyupRequest.cc +++ b/src/librbd/CopyupRequest.cc @@ -270,17 +270,20 @@ private: RWLock::RLocker owner_locker(m_ictx->owner_lock); RWLock::RLocker snap_locker(m_ictx->snap_lock); if (m_ictx->object_map.enabled()) { + bool copy_on_read = m_pending_requests.empty(); if (!m_ictx->image_watcher->is_lock_owner()) { - ldout(m_ictx->cct, 20) << "exclusive lock not held for copyup request" - << dendl; - assert(m_pending_requests.empty()); + ldout(m_ictx->cct, 20) << "exclusive lock not held for copyup request" + << dendl; + assert(copy_on_read); return true; } RWLock::WLocker object_map_locker(m_ictx->object_map_lock); - if (m_ictx->object_map[m_object_no] != OBJECT_EXISTS || - !m_ictx->snaps.empty()) { + if (copy_on_read && m_ictx->object_map[m_object_no] != OBJECT_EXISTS) { + // CoW already updates the HEAD object map m_snap_ids.push_back(CEPH_NOSNAP); + } + if (!m_ictx->snaps.empty()) { m_snap_ids.insert(m_snap_ids.end(), m_ictx->snaps.begin(), m_ictx->snaps.end()); } -- 2.39.5