NVMEDevice not implemented yet.
Signed-off-by: Sage Weil <sage@redhat.com>
virtual uint64_t get_size() const = 0;
virtual uint64_t get_block_size() const = 0;
- virtual int read(uint64_t off, uint64_t len, bufferlist *pbl,
- IOContext *ioc, bool buffered) = 0;
- virtual int read_random(uint64_t off, uint64_t len, char *buf,
- bool buffered) = 0;
-
- virtual int aio_write(uint64_t off, bufferlist& bl,
- IOContext *ioc, bool buffered) = 0;
+ virtual int read(
+ uint64_t off,
+ uint64_t len,
+ bufferlist *pbl,
+ IOContext *ioc,
+ bool buffered) = 0;
+ virtual int read_random(
+ uint64_t off,
+ uint64_t len,
+ char *buf,
+ bool buffered) = 0;
+
+ virtual int aio_read(
+ uint64_t off,
+ uint64_t len,
+ bufferlist *pbl,
+ IOContext *ioc) = 0;
+ virtual int aio_write(
+ uint64_t off,
+ bufferlist& bl,
+ IOContext *ioc,
+ bool buffered) = 0;
virtual int flush() = 0;
void queue_reap_ioc(IOContext *ioc);
return r < 0 ? r : 0;
}
+int KernelDevice::aio_read(
+ uint64_t off,
+ uint64_t len,
+ bufferlist *pbl,
+ IOContext *ioc)
+{
+ dout(5) << __func__ << " 0x" << std::hex << off << "~" << len << std::dec
+ << dendl;
+
+ int r = 0;
+#ifdef HAVE_LIBAIO
+ if (aio && dio) {
+ _aio_log_start(ioc, off, len);
+ ioc->pending_aios.push_back(FS::aio_t(ioc, fd_direct));
+ ++ioc->num_pending;
+ FS::aio_t& aio = ioc->pending_aios.back();
+ aio.pread(off, len);
+ for (unsigned i=0; i<aio.iov.size(); ++i) {
+ dout(30) << "aio " << i << " " << aio.iov[i].iov_base
+ << " " << aio.iov[i].iov_len << dendl;
+ }
+ pbl->append(aio.bl);
+ dout(5) << __func__ << " 0x" << std::hex << off << "~" << len
+ << std::dec << " aio " << &aio << dendl;
+ } else
+#endif
+ {
+ r = read(off, len, pbl, ioc, false);
+ }
+
+ return r;
+}
+
int KernelDevice::direct_read_unaligned(uint64_t off, uint64_t len, char *buf)
{
uint64_t aligned_off = align_down(off, block_size);
int read(uint64_t off, uint64_t len, bufferlist *pbl,
IOContext *ioc,
bool buffered) override;
+ int aio_read(uint64_t off, uint64_t len, bufferlist *pbl,
+ IOContext *ioc) override;
int read_random(uint64_t off, uint64_t len, char *buf, bool buffered) override;
int aio_write(uint64_t off, bufferlist& bl,
int read(uint64_t off, uint64_t len, bufferlist *pbl,
IOContext *ioc,
bool buffered) override;
-
+ int aio_read(
+ uint64_t off,
+ uint64_t len,
+ bufferlist *pbl,
+ IOContext *ioc) override {
+ assert(0 == "implement me");
+ }
int aio_write(uint64_t off, bufferlist& bl,
IOContext *ioc,
bool buffered) override;