return r;
}
+int NVMEDevice::aio_read(
+ uint64_t off,
+ uint64_t len,
+ bufferlist *pbl,
+ IOContext *ioc)
+{
+ uint64_t len = bl.length();
+ dout(20) << __func__ << " " << off << "~" << len << " ioc " << ioc << dendl;
+ assert(off % block_size == 0);
+ assert(len % block_size == 0);
+ assert(len > 0);
+ assert(off < size);
+ assert(off + len <= size);
+
+ Task *t = new Task(this, IOCommand::READ_COMMAND, off, len);
+
+ bufferptr p = buffer::create_page_aligned(len);
+ pbl->append(p);
+ int r = 0;
+ t->ctx = ioc;
+ char *buf = p.c_str();
+ t->fill_cb = [buf, t]() {
+ t->copy_to_buf(buf, 0, t->len);
+ };
+
+ Task *first = static_cast<Task*>(ioc->nvme_task_first);
+ Task *last = static_cast<Task*>(ioc->nvme_task_last);
+ if (last)
+ last->next = t;
+ if (!first)
+ ioc->nvme_task_first = t;
+ ioc->nvme_task_last = t;
+ ++ioc->num_pending;
+
+ return 0;
+}
+
+
+
int NVMEDevice::read_random(uint64_t off, uint64_t len, char *buf, bool buffered)
{
assert(len > 0);
uint64_t off,
uint64_t len,
bufferlist *pbl,
- IOContext *ioc) override {
- assert(0 == "implement me");
- }
+ IOContext *ioc) override;
int aio_write(uint64_t off, bufferlist& bl,
IOContext *ioc,
bool buffered) override;