]> git.proxmox.com Git - ceph.git/blame - ceph/src/librbd/plugin/Api.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / librbd / plugin / Api.cc
CommitLineData
f67539c2
TL
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#include "common/Timer.h"
5#include "librbd/plugin/Api.h"
6#include "librbd/ImageCtx.h"
7#include "librbd/io/AioCompletion.h"
8#include "librbd/io/Utils.h"
9#include "librbd/Operations.h"
10#include "librbd/Utils.h"
11
12namespace librbd {
13namespace plugin {
14
15template <typename I>
16void Api<I>::read_parent(
17 I *image_ctx, uint64_t object_no, io::ReadExtents* extents,
18 librados::snap_t snap_id, const ZTracer::Trace &trace,
19 Context* on_finish) {
20 io::util::read_parent<I>(image_ctx, object_no, extents, snap_id, trace,
21 on_finish);
22}
23
24template <typename I>
25void Api<I>::execute_image_metadata_set(
26 I *image_ctx, const std::string &key,
27 const std::string &value, Context *on_finish) {
28 ImageCtx* ictx = util::get_image_ctx(image_ctx);
29 ictx->operations->execute_metadata_set(key, value, on_finish);
30}
31
32template <typename I>
33void Api<I>::execute_image_metadata_remove(
34 I *image_ctx, const std::string &key, Context *on_finish) {
35 ImageCtx* ictx = util::get_image_ctx(image_ctx);
36 ictx->operations->execute_metadata_remove(key, on_finish);
37}
38
39template <typename I>
40void Api<I>::get_image_timer_instance(
41 CephContext *cct, SafeTimer **timer, ceph::mutex **timer_lock) {
42 ImageCtx::get_timer_instance(cct, timer, timer_lock);
43}
44
45template <typename I>
46bool Api<I>::test_image_features(I *image_ctx, uint64_t features) {
47 return image_ctx->test_features(features);
48}
49
50template <typename I>
51void Api<I>::update_aio_comp(io::AioCompletion* aio_comp,
52 uint32_t request_count,
53 io::ReadResult &read_result,
54 io::Extents &image_extents) {
55 aio_comp->set_request_count(request_count);
56 aio_comp->read_result = std::move(read_result);
57 aio_comp->read_result.set_image_extents(image_extents);
58 start_in_flight_io(aio_comp);
59}
60
61template <typename I>
62void Api<I>::update_aio_comp(
63 io::AioCompletion* aio_comp, uint32_t request_count) {
64 aio_comp->set_request_count(request_count);
65 start_in_flight_io(aio_comp);
66}
67
68template <typename I>
69io::ReadResult::C_ImageReadRequest* Api<I>::create_image_read_request(
70 io::AioCompletion* aio_comp, uint64_t buffer_offset,
71 const Extents& image_extents) {
72 return new io::ReadResult::C_ImageReadRequest(
73 aio_comp, buffer_offset, image_extents);
74}
75
76template <typename I>
77io::C_AioRequest* Api<I>::create_aio_request(io::AioCompletion* aio_comp) {
78 io::C_AioRequest *req_comp = new io::C_AioRequest(aio_comp);
79 return req_comp;
80}
81
82template <typename I>
83void Api<I>::start_in_flight_io(io::AioCompletion* aio_comp) {
84 if (!aio_comp->async_op.started()) {
85 aio_comp->start_op();
86 }
87}
88
89} // namespace plugin
90} // namespace librbd
91
92template class librbd::plugin::Api<librbd::ImageCtx>;