}
// 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,
}
// 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;
}
// 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
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
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 =