From: Jason Dillaman Date: Tue, 10 Mar 2015 00:31:46 +0000 (-0400) Subject: librbd: use ImageCtx::get_parent_overlap helper function X-Git-Tag: v0.94~47^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e7f9e3bdd9f92c7b3b38217a2ec4966c37932524;p=ceph.git librbd: use ImageCtx::get_parent_overlap helper function Replace all direct references to ImageCtx::parent_md.overlap with the helper method. Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/AioRequest.cc b/src/librbd/AioRequest.cc index 37fda2bf08c7..3bbbab9ec6e9 100644 --- a/src/librbd/AioRequest.cc +++ b/src/librbd/AioRequest.cc @@ -209,8 +209,12 @@ namespace librbd { } // If parent still exists, overlap might also have changed. + uint64_t parent_overlap; + r = m_ictx->get_parent_overlap(CEPH_NOSNAP, &parent_overlap); + assert(r == 0); + uint64_t newlen = m_ictx->prune_parent_extents( - m_image_extents, m_ictx->parent_md.overlap); + m_image_extents, parent_overlap); if (newlen != 0) { // create and kick off a CopyupRequest CopyupRequest *new_req = new CopyupRequest(m_ictx, m_oid, @@ -340,13 +344,17 @@ namespace librbd { } // If parent still exists, overlap might also have changed. + uint64_t parent_overlap; + r = m_ictx->get_parent_overlap(CEPH_NOSNAP, &parent_overlap); + assert(r == 0); + uint64_t newlen = m_ictx->prune_parent_extents( - m_object_image_extents, m_ictx->parent_md.overlap); + m_object_image_extents, parent_overlap); // copyup the entire object up to the overlap point, if any if (newlen != 0) { ldout(m_ictx->cct, 20) << "should_complete(" << this << ") overlap " - << m_ictx->parent_md.overlap << " newlen " + << parent_overlap << " newlen " << newlen << " image_extents" << m_object_image_extents << dendl; diff --git a/src/librbd/AsyncFlattenRequest.cc b/src/librbd/AsyncFlattenRequest.cc index 88afe5f54fba..87c2655641f4 100644 --- a/src/librbd/AsyncFlattenRequest.cc +++ b/src/librbd/AsyncFlattenRequest.cc @@ -49,7 +49,10 @@ public: } // resize might have occurred while flatten is running - overlap = min(m_image_ctx.size, m_image_ctx.parent_md.overlap); + uint64_t parent_overlap; + int r = m_image_ctx.get_parent_overlap(CEPH_NOSNAP, &parent_overlap); + assert(r == 0); + overlap = min(m_image_ctx.size, parent_overlap); } // map child object onto the parent diff --git a/src/librbd/AsyncTrimRequest.cc b/src/librbd/AsyncTrimRequest.cc index 21c8a69d64ec..d3dcd8118735 100644 --- a/src/librbd/AsyncTrimRequest.cc +++ b/src/librbd/AsyncTrimRequest.cc @@ -254,9 +254,11 @@ bool AsyncTrimRequest::send_clean_boundary() { uint64_t parent_overlap; { RWLock::RLocker l2(m_image_ctx.snap_lock); - RWLock::RLocker l3(m_image_ctx.parent_lock); snapc = m_image_ctx.snapc; - parent_overlap = m_image_ctx.parent_md.overlap; + + RWLock::RLocker l3(m_image_ctx.parent_lock); + int r = m_image_ctx.get_parent_overlap(CEPH_NOSNAP, &parent_overlap); + assert(r == 0); } // discard the weird boundary, if any diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index 2af7b2a2ded5..f37835a8a7cb 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -2554,11 +2554,12 @@ reprotect_and_return_err: snapc = ictx->snapc; assert(ictx->parent != NULL); - assert(ictx->parent_md.overlap <= ictx->size); + r = ictx->get_parent_overlap(CEPH_NOSNAP, &overlap); + assert(r == 0); + assert(overlap <= ictx->size); object_size = ictx->get_object_size(); - overlap = ictx->parent_md.overlap; - overlap_objects = Striper::get_num_objects(ictx->layout, overlap); + overlap_objects = Striper::get_num_objects(ictx->layout, overlap); } AsyncFlattenRequest *req =