template <typename I>
void CopyupRequest<I>::read_from_parent() {
auto cct = m_image_ctx->cct;
- m_image_ctx->snap_lock.get_read();
- m_image_ctx->parent_lock.get_read();
+ RWLock::RLocker snap_locker(m_image_ctx->snap_lock);
+ RWLock::RLocker parent_locker(m_image_ctx->parent_lock);
if (m_image_ctx->parent == nullptr) {
ldout(cct, 5) << "parent detached" << dendl;
- m_image_ctx->parent_lock.put_read();
- m_image_ctx->snap_lock.put_read();
m_image_ctx->op_work_queue->queue(
util::create_context_callback<
-ENOENT);
return;
} else if (is_deep_copy()) {
- // will release locks
deep_copy();
return;
}
ImageRequest<I>::aio_read(m_image_ctx->parent, comp,
std::move(m_image_extents),
ReadResult{&m_copyup_data}, 0, m_trace);
-
- m_image_ctx->parent_lock.put_read();
- m_image_ctx->snap_lock.put_read();
}
template <typename I>
m_object_no, m_flatten, ctx);
req->send();
- m_image_ctx->parent_lock.put_read();
- m_image_ctx->snap_lock.put_read();
}
template <typename I>
void ObjectReadRequest<I>::read_parent() {
I *image_ctx = this->m_ictx;
- image_ctx->snap_lock.get_read();
- image_ctx->parent_lock.get_read();
+ RWLock::RLocker snap_locker(image_ctx->snap_lock);
+ RWLock::RLocker parent_locker(image_ctx->parent_lock);
// calculate reverse mapping onto the image
Extents parent_extents;
}
if (object_overlap == 0) {
- image_ctx->parent_lock.put_read();
- image_ctx->snap_lock.put_read();
+ parent_locker.unlock();
+ snap_locker.unlock();
this->finish(-ENOENT);
return;
ImageRequest<I>::aio_read(image_ctx->parent, parent_completion,
std::move(parent_extents), ReadResult{m_read_data},
0, this->m_trace);
-
- image_ctx->parent_lock.put_read();
- image_ctx->snap_lock.put_read();
}
template <typename I>