}
auto req = io::ImageDispatchSpec::create_list_snaps(
m_image_ctx, io::IMAGE_DISPATCH_LAYER_INTERNAL_START,
- aio_comp, {{m_image_offset, m_image_length}},
+ aio_comp, {{m_image_offset, m_image_length}}, io::ImageArea::DATA,
{m_diff_context.from_snap_id, m_diff_context.end_snap_id},
list_snaps_flags, &m_snapshot_delta, {});
req->send();
}
auto req = io::ImageDispatchSpec::create_read(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
- std::move(read_result), image_ctx.get_data_io_context(), op_flags, 0,
- trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
+ {{off, len}}, io::ImageArea::DATA, std::move(read_result),
+ image_ctx.get_data_io_context(), op_flags, 0, trace);
req->send();
}
}
auto req = io::ImageDispatchSpec::create_write(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
- std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
+ {{off, len}}, io::ImageArea::DATA, std::move(bl),
+ image_ctx.get_data_io_context(), op_flags, trace);
req->send();
}
}
auto req = io::ImageDispatchSpec::create_discard(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
- discard_granularity_bytes, image_ctx.get_data_io_context(), trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
+ {{off, len}}, io::ImageArea::DATA, discard_granularity_bytes,
+ image_ctx.get_data_io_context(), trace);
req->send();
}
}
auto req = io::ImageDispatchSpec::create_write_same(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
- std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
+ {{off, len}}, io::ImageArea::DATA, std::move(bl),
+ image_ctx.get_data_io_context(), op_flags, trace);
req->send();
}
aio_comp->aio_type = io::AIO_TYPE_WRITE;
auto req = io::ImageDispatchSpec::create_write(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
- std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
+ {{off, len}}, io::ImageArea::DATA, std::move(bl),
+ image_ctx.get_data_io_context(), op_flags, trace);
req->send();
return;
} else if (prepend_length == 0 && append_length == 0) {
bl.append_zero(data_length);
auto req = io::ImageDispatchSpec::create_write_same(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
- std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
+ {{off, len}}, io::ImageArea::DATA, std::move(bl),
+ image_ctx.get_data_io_context(), op_flags, trace);
req->send();
return;
}
auto prepend_aio_comp = io::AioCompletion::create_and_start(
prepend_ctx, &image_ctx, io::AIO_TYPE_WRITE);
auto prepend_req = io::ImageDispatchSpec::create_write(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, prepend_aio_comp,
- {{prepend_offset, prepend_length}}, std::move(bl),
- image_ctx.get_data_io_context(), op_flags, trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, prepend_aio_comp,
+ {{prepend_offset, prepend_length}}, io::ImageArea::DATA,
+ std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
prepend_req->send();
}
auto append_aio_comp = io::AioCompletion::create_and_start(
append_ctx, &image_ctx, io::AIO_TYPE_WRITE);
auto append_req = io::ImageDispatchSpec::create_write(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, append_aio_comp,
- {{append_offset, append_length}}, std::move(bl),
- image_ctx.get_data_io_context(), op_flags, trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, append_aio_comp,
+ {{append_offset, append_length}}, io::ImageArea::DATA,
+ std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
append_req->send();
}
auto write_same_aio_comp = io::AioCompletion::create_and_start(
write_same_ctx, &image_ctx, io::AIO_TYPE_WRITESAME);
auto req = io::ImageDispatchSpec::create_write_same(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, write_same_aio_comp,
- {{write_same_offset, write_same_length}}, std::move(bl),
- image_ctx.get_data_io_context(), op_flags, trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, write_same_aio_comp,
+ {{write_same_offset, write_same_length}}, io::ImageArea::DATA,
+ std::move(bl), image_ctx.get_data_io_context(), op_flags, trace);
req->send();
return;
}
uint32_t discard_granularity_bytes = 0;
auto req = io::ImageDispatchSpec::create_discard(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
- discard_granularity_bytes, image_ctx.get_data_io_context(), trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
+ {{off, len}}, io::ImageArea::DATA, discard_granularity_bytes,
+ image_ctx.get_data_io_context(), trace);
req->send();
}
}
auto req = io::ImageDispatchSpec::create_compare_and_write(
- image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp, {{off, len}},
- std::move(cmp_bl), std::move(bl), mismatch_off,
- image_ctx.get_data_io_context(), op_flags, trace);
+ image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
+ {{off, len}}, io::ImageArea::DATA, std::move(cmp_bl), std::move(bl),
+ mismatch_off, image_ctx.get_data_io_context(), op_flags, trace);
req->send();
}
ZTracer::Trace trace;
auto req = io::ImageDispatchSpec::create_read(
*image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp,
- std::move(image_extents), io::ReadResult{bl},
- image_ctx->get_data_io_context(),
- fadvise_flags, 0, trace);
+ std::move(image_extents), io::ImageArea::DATA, io::ReadResult{bl},
+ image_ctx->get_data_io_context(), fadvise_flags, 0, trace);
req->send();
}
ZTracer::Trace trace;
auto req = io::ImageDispatchSpec::create_write(
*image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp,
- std::move(image_extents), std::move(bl),
+ std::move(image_extents), io::ImageArea::DATA, std::move(bl),
image_ctx->get_data_io_context(), fadvise_flags, trace);
req->send();
}
ZTracer::Trace trace;
auto req = io::ImageDispatchSpec::create_discard(
*image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp,
- {{offset, length}}, discard_granularity_bytes,
+ {{offset, length}}, io::ImageArea::DATA, discard_granularity_bytes,
image_ctx->get_data_io_context(), trace);
req->send();
}
ZTracer::Trace trace;
auto req = io::ImageDispatchSpec::create_write_same(
*image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp,
- {{offset, length}}, std::move(bl), image_ctx->get_data_io_context(),
- fadvise_flags, trace);
+ {{offset, length}}, io::ImageArea::DATA, std::move(bl),
+ image_ctx->get_data_io_context(), fadvise_flags, trace);
req->send();
}
ZTracer::Trace trace;
auto req = io::ImageDispatchSpec::create_compare_and_write(
*image_ctx, io::IMAGE_DISPATCH_LAYER_WRITEBACK_CACHE, aio_comp,
- std::move(image_extents), std::move(cmp_bl), std::move(bl),
- mismatch_offset, image_ctx->get_data_io_context(),
+ std::move(image_extents), io::ImageArea::DATA, std::move(cmp_bl),
+ std::move(bl), mismatch_offset, image_ctx->get_data_io_context(),
fadvise_flags, trace);
req->send();
}
ZTracer::Trace trace;
auto req = io::ImageDispatchSpec::create_read(
*m_image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
- {{0, data_offset}}, io::ReadResult{&m_bl},
- m_image_ctx->get_data_io_context(), 0, 0, trace);
+ {{0, data_offset}}, io::ImageArea::CRYPTO_HEADER,
+ io::ReadResult{&m_bl}, m_image_ctx->get_data_io_context(), 0, 0,
+ trace);
req->send();
}
ZTracer::Trace trace;
auto req = io::ImageDispatchSpec::create_write(
*m_image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
- {{0, m_bl.length()}}, std::move(m_bl),
- m_image_ctx->get_data_io_context(), 0, trace);
+ {{0, m_bl.length()}}, io::ImageArea::CRYPTO_HEADER,
+ std::move(m_bl), m_image_ctx->get_data_io_context(), 0, trace);
req->send();
}
ZTracer::Trace trace;
auto req = io::ImageDispatchSpec::create_write(
*m_image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
- {{0, bl.length()}}, std::move(bl),
+ {{0, bl.length()}}, io::ImageArea::DATA, std::move(bl),
m_image_ctx->get_data_io_context(), 0, trace);
req->send();
}
ZTracer::Trace trace;
auto req = io::ImageDispatchSpec::create_read(
*m_image_ctx, io::IMAGE_DISPATCH_LAYER_API_START, aio_comp,
- {{m_offset, length}}, io::ReadResult{&m_bl},
+ {{m_offset, length}}, io::ImageArea::DATA, io::ReadResult{&m_bl},
m_image_ctx->get_data_io_context(), 0, 0, trace);
req->send();
}
ctx, get_image_ctx(m_src_image_ctx), io::AIO_TYPE_GENERIC);
auto req = io::ImageDispatchSpec::create_list_snaps(
*m_src_image_ctx, io::IMAGE_DISPATCH_LAYER_NONE, aio_comp,
- io::Extents{m_image_extents}, std::move(snap_ids), list_snaps_flags,
- &m_snapshot_delta, {});
+ io::Extents{m_image_extents}, m_image_area, std::move(snap_ids),
+ list_snaps_flags, &m_snapshot_delta, {});
req->send();
}
auto req = io::ImageDispatchSpec::create_read(
*m_src_image_ctx, io::IMAGE_DISPATCH_LAYER_INTERNAL_START, aio_comp,
- std::move(image_extents), std::move(read_result), io_context, op_flags,
- read_flags, {});
+ std::move(image_extents), m_image_area, std::move(read_result),
+ io_context, op_flags, read_flags, {});
req->send();
}
ctx, src, io::AIO_TYPE_READ);
auto req = io::ImageDispatchSpec::create_read(
*src, io::IMAGE_DISPATCH_LAYER_NONE, comp,
- {{offset, len}}, io::ReadResult{bl},
+ {{offset, len}}, io::ImageArea::DATA, io::ReadResult{bl},
src->get_data_io_context(), fadvise_flags, 0, trace);
ctx->read_trace = trace;
io::AIO_TYPE_READ);
auto req = io::ImageDispatchSpec::create_read(
*ictx, io::IMAGE_DISPATCH_LAYER_NONE, c,
- {{off, read_len}}, io::ReadResult{&bl},
+ {{off, read_len}}, io::ImageArea::DATA, io::ReadResult{&bl},
ictx->get_data_io_context(), 0, 0, trace);
req->send();
template <typename I>
CopyupRequest<I>::CopyupRequest(I *ictx, uint64_t objectno,
- Extents &&image_extents,
+ Extents &&image_extents, ImageArea area,
const ZTracer::Trace &parent_trace)
: m_image_ctx(ictx), m_object_no(objectno),
- m_image_extents(std::move(image_extents)),
+ m_image_extents(std::move(image_extents)), m_image_area(area),
m_trace(librbd::util::create_trace(*m_image_ctx, "copy-up", parent_trace))
{
ceph_assert(m_image_ctx->data_ctx.is_valid());
<< dendl;
auto req = io::ImageDispatchSpec::create_read(
*m_image_ctx->parent, io::IMAGE_DISPATCH_LAYER_INTERNAL_START, comp,
- std::move(m_image_extents),
+ std::move(m_image_extents), m_image_area,
ReadResult{&m_copyup_extent_map, &m_copyup_data},
m_image_ctx->parent->get_data_io_context(), 0, 0, m_trace);
req->send();
class CopyupRequest {
public:
static CopyupRequest* create(ImageCtxT *ictx, uint64_t objectno,
- Extents &&image_extents,
+ Extents &&image_extents, ImageArea area,
const ZTracer::Trace &parent_trace) {
- return new CopyupRequest(ictx, objectno, std::move(image_extents),
+ return new CopyupRequest(ictx, objectno, std::move(image_extents), area,
parent_trace);
}
- CopyupRequest(ImageCtxT *ictx, uint64_t objectno, Extents &&image_extents,
+ CopyupRequest(ImageCtxT *ictx, uint64_t objectno,
+ Extents &&image_extents, ImageArea area,
const ZTracer::Trace &parent_trace);
~CopyupRequest();
ImageCtxT *m_image_ctx;
uint64_t m_object_no;
Extents m_image_extents;
+ ImageArea m_image_area;
ZTracer::Trace m_trace;
bool m_flatten = false;
template <typename ImageCtxT = ImageCtx>
static ImageDispatchSpec* create_read(
ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
- AioCompletion *aio_comp, Extents &&image_extents,
+ AioCompletion *aio_comp, Extents &&image_extents, ImageArea area,
ReadResult &&read_result, IOContext io_context, int op_flags,
int read_flags, const ZTracer::Trace &parent_trace) {
return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
image_dispatch_layer, aio_comp,
- std::move(image_extents),
+ std::move(image_extents), area,
Read{std::move(read_result), read_flags},
io_context, op_flags, parent_trace);
}
template <typename ImageCtxT = ImageCtx>
static ImageDispatchSpec* create_discard(
ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
- AioCompletion *aio_comp, Extents &&image_extents,
+ AioCompletion *aio_comp, Extents &&image_extents, ImageArea area,
uint32_t discard_granularity_bytes, IOContext io_context,
const ZTracer::Trace &parent_trace) {
return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
image_dispatch_layer, aio_comp,
- std::move(image_extents),
+ std::move(image_extents), area,
Discard{discard_granularity_bytes},
io_context, 0, parent_trace);
}
template <typename ImageCtxT = ImageCtx>
static ImageDispatchSpec* create_write(
ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
- AioCompletion *aio_comp, Extents &&image_extents,
+ AioCompletion *aio_comp, Extents &&image_extents, ImageArea area,
bufferlist &&bl, IOContext io_context, int op_flags,
const ZTracer::Trace &parent_trace) {
return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
image_dispatch_layer, aio_comp,
- std::move(image_extents), Write{std::move(bl)},
+ std::move(image_extents), area,
+ Write{std::move(bl)},
io_context, op_flags, parent_trace);
}
template <typename ImageCtxT = ImageCtx>
static ImageDispatchSpec* create_write_same(
ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
- AioCompletion *aio_comp, Extents &&image_extents,
+ AioCompletion *aio_comp, Extents &&image_extents, ImageArea area,
bufferlist &&bl, IOContext io_context, int op_flags,
const ZTracer::Trace &parent_trace) {
return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
image_dispatch_layer, aio_comp,
- std::move(image_extents),
+ std::move(image_extents), area,
WriteSame{std::move(bl)},
io_context, op_flags, parent_trace);
}
template <typename ImageCtxT = ImageCtx>
static ImageDispatchSpec* create_compare_and_write(
ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
- AioCompletion *aio_comp, Extents &&image_extents,
+ AioCompletion *aio_comp, Extents &&image_extents, ImageArea area,
bufferlist &&cmp_bl, bufferlist &&bl, uint64_t *mismatch_offset,
IOContext io_context, int op_flags, const ZTracer::Trace &parent_trace) {
return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
image_dispatch_layer, aio_comp,
- std::move(image_extents),
+ std::move(image_extents), area,
CompareAndWrite{std::move(cmp_bl),
std::move(bl),
mismatch_offset},
const ZTracer::Trace &parent_trace) {
return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
image_dispatch_layer, aio_comp, {},
+ ImageArea::DATA /* dummy for {} */,
Flush{flush_source}, {}, 0, parent_trace);
}
template <typename ImageCtxT = ImageCtx>
static ImageDispatchSpec* create_list_snaps(
ImageCtxT &image_ctx, ImageDispatchLayer image_dispatch_layer,
- AioCompletion *aio_comp, Extents &&image_extents, SnapIds&& snap_ids,
- int list_snaps_flags, SnapshotDelta* snapshot_delta,
+ AioCompletion *aio_comp, Extents &&image_extents, ImageArea area,
+ SnapIds&& snap_ids, int list_snaps_flags, SnapshotDelta* snapshot_delta,
const ZTracer::Trace &parent_trace) {
return new ImageDispatchSpec(image_ctx.io_image_dispatcher,
image_dispatch_layer, aio_comp,
- std::move(image_extents),
+ std::move(image_extents), area,
ListSnaps{std::move(snap_ids),
list_snaps_flags, snapshot_delta},
{}, 0, parent_trace);
ImageDispatchSpec(ImageDispatcherInterface* image_dispatcher,
ImageDispatchLayer image_dispatch_layer,
AioCompletion* aio_comp, Extents&& image_extents,
- Request&& request, IOContext io_context, int op_flags,
- const ZTracer::Trace& parent_trace)
+ ImageArea area, Request&& request, IOContext io_context,
+ int op_flags, const ZTracer::Trace& parent_trace)
: dispatcher_ctx(this), image_dispatcher(image_dispatcher),
dispatch_layer(image_dispatch_layer), aio_comp(aio_comp),
image_extents(std::move(image_extents)), request(std::move(request)),
if (it == image_ctx->copyup_list.end()) {
// create and kick off a CopyupRequest
auto new_req = CopyupRequest<I>::create(
- image_ctx, this->m_object_no, std::move(parent_extents), this->m_trace);
+ image_ctx, this->m_object_no, std::move(parent_extents), area,
+ this->m_trace);
image_ctx->copyup_list[this->m_object_no] = new_req;
image_ctx->copyup_list_lock.unlock();
auto it = image_ctx->copyup_list.find(this->m_object_no);
if (it == image_ctx->copyup_list.end()) {
auto new_req = CopyupRequest<I>::create(
- image_ctx, this->m_object_no, std::move(this->m_parent_extents),
- this->m_trace);
+ image_ctx, this->m_object_no, std::move(this->m_parent_extents),
+ m_image_area, this->m_trace);
this->m_parent_extents.clear();
// make sure to wait on this CopyupRequest
<< " area=" << area << dendl;
auto req = io::ImageDispatchSpec::create_read(
*image_ctx->parent, io::IMAGE_DISPATCH_LAYER_INTERNAL_START, comp,
- std::move(parent_extents), ReadResult{parent_read_bl},
+ std::move(parent_extents), area, ReadResult{parent_read_bl},
image_ctx->parent->get_data_io_context(), 0, 0, trace);
req->send();
}
on_finish, util::get_image_ctx(m_image_ctx), io::AIO_TYPE_GENERIC);
auto req = io::ImageDispatchSpec::create_list_snaps(
*m_image_ctx, io::IMAGE_DISPATCH_LAYER_MIGRATION, aio_comp,
- std::move(image_extents), std::move(snap_ids), list_snaps_flags,
- snapshot_delta, {});
+ std::move(image_extents), io::ImageArea::DATA, std::move(snap_ids),
+ list_snaps_flags, snapshot_delta, {});
req->send();
}
const Extents&));
static CopyupRequest* s_instance;
- static CopyupRequest* create(librbd::MockImageCtx *ictx,
- uint64_t objectno, Extents &&image_extents,
- const ZTracer::Trace &parent_trace) {
+ static CopyupRequest* create(librbd::MockImageCtx* ictx, uint64_t objectno,
+ Extents&& image_extents, ImageArea area,
+ const ZTracer::Trace& parent_trace) {
return s_instance;
}
{{0, 4096}}, data, 0);
expect_write(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
data, 0);
expect_write(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
expect_sparse_copyup(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0),
{{0, 4096}}, data, 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->send();
flush_async_operations(ictx);
expect_sparse_copyup(mock_image_ctx, 0, ictx->get_object_name(0), {{0, 4096}},
data, 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->send();
flush_async_operations(ictx);
{}, "", 0);
expect_write(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
expect_object_map_update(mock_image_ctx, CEPH_NOSNAP, 0, OBJECT_EXISTS, true,
0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->send();
flush_async_operations(ictx);
{}, "", 0);
expect_write(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
{}, "", 0);
expect_write(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
{}, "", 0);
expect_write(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
expect_sparse_copyup(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0),
{}, "", 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->send();
flush_async_operations(ictx);
MockAbstractObjectWriteRequest mock_write_request;
expect_is_empty_write_op(mock_write_request, true);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
expect_object_map_update(mock_image_ctx, CEPH_NOSNAP, 0, OBJECT_EXISTS, true,
0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
expect_add_copyup_ops(mock_write_request1);
expect_sparse_copyup(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0),
{{0, 4096}}, data, 0);
expect_read_parent(mock_parent_image_ctx, {{0, 4096}}, "", -EPERM);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
MockAbstractObjectWriteRequest mock_write_request;
req->append_request(&mock_write_request, {});
expect_read_parent(mock_parent_image_ctx, {{0, 4096}}, data, 0);
expect_prepare_copyup(mock_image_ctx, -EIO);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
MockAbstractObjectWriteRequest mock_write_request;
req->append_request(&mock_write_request, {});
expect_is_empty_write_op(mock_write_request, false);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
expect_object_map_update(mock_image_ctx, CEPH_NOSNAP, 0, OBJECT_EXISTS, true,
-EINVAL);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
data, -EPERM);
expect_write(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
expect_copyup(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), data, 0);
expect_write(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {});
req->send();
{{2048, 1024}}, data.substr(0, 1024), 0);
expect_write(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {{0, 1024}});
req->send();
{{0, 1024}, {2048, 1024}}, data.substr(0, 2048), 0);
expect_write(mock_image_ctx, CEPH_NOSNAP, ictx->get_object_name(0), 0);
- auto req = new MockCopyupRequest(&mock_image_ctx, 0,
- {{0, 4096}}, {});
+ auto req = new MockCopyupRequest(&mock_image_ctx, 0, {{0, 4096}},
+ ImageArea::DATA, {});
mock_image_ctx.copyup_list[0] = req;
req->append_request(&mock_write_request, {{0, 1024}});
req->send();
static CopyupRequest* s_instance;
static CopyupRequest* create(librbd::MockTestImageCtx *ictx,
uint64_t objectno, Extents &&image_extents,
- const ZTracer::Trace &parent_trace) {
+ ImageArea area,
+ const ZTracer::Trace& parent_trace) {
return s_instance;
}