]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/io/ReadResult.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / librbd / io / ReadResult.h
index 6fb5e4a4c18f26ced445a65231401d90f7a1e370..67339caec85f27d1b56dce7c6c4761f24d385bf0 100644 (file)
@@ -4,6 +4,7 @@
 #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"
@@ -12,7 +13,6 @@
 #include <sys/uio.h>
 #include <boost/variant/variant.hpp>
 
-struct CephContext;
 
 namespace librbd {
 
@@ -40,13 +40,14 @@ public:
     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;
   };
@@ -55,6 +56,7 @@ public:
   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);
@@ -87,10 +89,21 @@ private:
     }
   };
 
+  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;