#ifndef CEPH_LIBRBD_IO_READ_RESULT_H
#define CEPH_LIBRBD_IO_READ_RESULT_H
+#include "include/common_fwd.h"
#include "include/int_types.h"
#include "include/buffer_fwd.h"
#include "include/Context.h"
#include <sys/uio.h>
#include <boost/variant/variant.hpp>
-struct CephContext;
namespace librbd {
AioCompletion *aio_completion;
uint64_t object_off;
uint64_t object_len;
- Extents buffer_extents;
+ LightweightBufferExtents buffer_extents;
bufferlist bl;
ExtentMap extent_map;
C_ObjectReadRequest(AioCompletion *aio_completion, uint64_t object_off,
- uint64_t object_len, Extents&& buffer_extents);
+ uint64_t object_len,
+ LightweightBufferExtents&& buffer_extents);
void finish(int r) override;
};
ReadResult(char *buf, size_t buf_len);
ReadResult(const struct iovec *iov, int iov_count);
ReadResult(ceph::bufferlist *bl);
+ ReadResult(std::map<uint64_t, uint64_t> *extent_map, ceph::bufferlist *bl);
void set_clip_length(size_t length);
void assemble_result(CephContext *cct);
}
};
+ struct SparseBufferlist {
+ std::map<uint64_t, uint64_t> *extent_map;
+ ceph::bufferlist *bl;
+
+ SparseBufferlist(std::map<uint64_t, uint64_t> *extent_map,
+ ceph::bufferlist *bl)
+ : extent_map(extent_map), bl(bl) {
+ }
+ };
+
typedef boost::variant<Empty,
Linear,
Vector,
- Bufferlist> Buffer;
+ Bufferlist,
+ SparseBufferlist> Buffer;
struct SetClipLengthVisitor;
struct AssembleResultVisitor;