]>
Commit | Line | Data |
---|---|---|
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 | ||
12 | namespace librbd { | |
13 | namespace plugin { | |
14 | ||
15 | template <typename I> | |
16 | void 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 | ||
24 | template <typename I> | |
25 | void 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 | ||
32 | template <typename I> | |
33 | void 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 | ||
39 | template <typename I> | |
40 | void 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 | ||
45 | template <typename I> | |
46 | bool Api<I>::test_image_features(I *image_ctx, uint64_t features) { | |
47 | return image_ctx->test_features(features); | |
48 | } | |
49 | ||
50 | template <typename I> | |
51 | void 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 | ||
61 | template <typename I> | |
62 | void 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 | ||
68 | template <typename I> | |
69 | io::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 | ||
76 | template <typename I> | |
77 | io::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 | ||
82 | template <typename I> | |
83 | void 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 | ||
92 | template class librbd::plugin::Api<librbd::ImageCtx>; |