]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: use ImageCtx::get_parent_overlap helper function
authorJason Dillaman <dillaman@redhat.com>
Tue, 10 Mar 2015 00:31:46 +0000 (20:31 -0400)
committerJosh Durgin <jdurgin@redhat.com>
Tue, 10 Mar 2015 22:41:46 +0000 (15:41 -0700)
Replace all direct references to ImageCtx::parent_md.overlap
with the helper method.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/AioRequest.cc
src/librbd/AsyncFlattenRequest.cc
src/librbd/AsyncTrimRequest.cc
src/librbd/internal.cc

index 37fda2bf08c78fbf4cc2d15e761eb328ec7355f7..3bbbab9ec6e94285dcb9eae218e092182aefe917 100644 (file)
@@ -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;
 
index 88afe5f54fbacfe9edd2d4d9fce90764e3328745..87c2655641f4adb4abb9ff3681db69c12bd3a6f3 100644 (file)
@@ -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
index 21c8a69d64ecf3b90efc5dbd6eeb6f954745f3cf..d3dcd8118735f24f530fb85e65104d5d9358f8bf 100644 (file)
@@ -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
index 2af7b2a2ded5aa64695fd0e7c2f583c6b40ddf68..f37835a8a7cbfbebcd861364ad856983d13d36b7 100644 (file)
@@ -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 =