1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_LIBRBD_IO_READ_RESULT_H
5 #define CEPH_LIBRBD_IO_READ_RESULT_H
7 #include "include/common_fwd.h"
8 #include "include/int_types.h"
9 #include "include/buffer_fwd.h"
10 #include "include/Context.h"
11 #include "librbd/io/Types.h"
12 #include "osdc/Striper.h"
14 #include <boost/variant/variant.hpp>
24 template <typename
> struct ObjectReadRequest
;
28 struct C_ImageReadRequest
: public Context
{
29 AioCompletion
*aio_completion
;
30 Extents image_extents
;
33 C_ImageReadRequest(AioCompletion
*aio_completion
,
34 const Extents image_extents
);
36 void finish(int r
) override
;
39 struct C_ObjectReadRequest
: public Context
{
40 AioCompletion
*aio_completion
;
43 LightweightBufferExtents buffer_extents
;
48 C_ObjectReadRequest(AioCompletion
*aio_completion
, uint64_t object_off
,
50 LightweightBufferExtents
&& buffer_extents
);
52 void finish(int r
) override
;
56 ReadResult(char *buf
, size_t buf_len
);
57 ReadResult(const struct iovec
*iov
, int iov_count
);
58 ReadResult(ceph::bufferlist
*bl
);
59 ReadResult(std::map
<uint64_t, uint64_t> *extent_map
, ceph::bufferlist
*bl
);
61 void set_clip_length(size_t length
);
62 void assemble_result(CephContext
*cct
);
72 Linear(char *buf
, size_t buf_len
) : buf(buf
), buf_len(buf_len
) {
77 const struct iovec
*iov
;
80 Vector(const struct iovec
*iov
, int iov_count
)
81 : iov(iov
), iov_count(iov_count
) {
88 Bufferlist(ceph::bufferlist
*bl
) : bl(bl
) {
92 struct SparseBufferlist
{
93 std::map
<uint64_t, uint64_t> *extent_map
;
96 SparseBufferlist(std::map
<uint64_t, uint64_t> *extent_map
,
98 : extent_map(extent_map
), bl(bl
) {
102 typedef boost::variant
<Empty
,
106 SparseBufferlist
> Buffer
;
107 struct SetClipLengthVisitor
;
108 struct AssembleResultVisitor
;
111 Striper::StripedReadResult m_destriper
;
116 } // namespace librbd
118 #endif // CEPH_LIBRBD_IO_READ_RESULT_H