]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
aio: move aio.h/cc from fs dir to bluestore dir 16409/head
authorPan Liu <wanjun.lp@alibaba-inc.com>
Wed, 19 Jul 2017 03:51:24 +0000 (11:51 +0800)
committerPan Liu <wanjun.lp@alibaba-inc.com>
Wed, 19 Jul 2017 03:51:24 +0000 (11:51 +0800)
Signed-off-by: Pan Liu <wanjun.lp@alibaba-inc.com>
src/os/CMakeLists.txt
src/os/bluestore/BlockDevice.h
src/os/bluestore/KernelDevice.h
src/os/bluestore/PMEMDevice.h
src/os/bluestore/aio.cc [new file with mode: 0644]
src/os/bluestore/aio.h [new file with mode: 0644]
src/os/fs/aio.cc [deleted file]
src/os/fs/aio.h [deleted file]

index 5edbb2db96a8c9ded0a1e2e8619425ccb4960d7a..a98fe1db0606d24420579e79bb98047f481724cf 100644 (file)
@@ -16,8 +16,7 @@ set(libos_srcs
   memstore/MemStore.cc
   kstore/KStore.cc
   kstore/kstore_types.cc
-  fs/FS.cc
-  fs/aio.cc)
+  fs/FS.cc)
 
 if(HAVE_LIBAIO)
   list(APPEND libos_srcs
@@ -34,6 +33,7 @@ if(HAVE_LIBAIO)
     bluestore/StupidAllocator.cc
     bluestore/BitMapAllocator.cc
     bluestore/BitAllocator.cc
+    bluestore/aio.cc
   )
 endif(HAVE_LIBAIO)
 
index f2b48f05a8bd7c3a8b746b52e2aaa1b889dc78f9..5d511ddbb5708a20132c9b8eae267f0c70cec72a 100644 (file)
@@ -23,7 +23,7 @@
 #include <list>
 
 #include "acconfig.h"
-#include "os/fs/aio.h"
+#include "aio.h"
 
 #define SPDK_PREFIX "spdk:"
 
index faccde3d5ba086c07140cfc894438a0c03d07c65..f04b7f972af3a8c46e6e86e569e945c1571d3f94 100644 (file)
@@ -18,9 +18,9 @@
 #include <atomic>
 
 #include "os/fs/FS.h"
-#include "os/fs/aio.h"
 #include "include/interval_set.h"
 
+#include "aio.h"
 #include "BlockDevice.h"
 
 class KernelDevice : public BlockDevice {
index a908c7876e7b6ee4ddeaa640ebec9a293672825c..c08e3cc5f2f1ae4c633cbb6bace7d93a2ddc8aa2 100644 (file)
@@ -20,8 +20,8 @@
 #include <atomic>
 
 #include "os/fs/FS.h"
-#include "os/fs/aio.h"
 #include "include/interval_set.h"
+#include "aio.h"
 #include "BlockDevice.h"
 
 class PMEMDevice : public BlockDevice {
diff --git a/src/os/bluestore/aio.cc b/src/os/bluestore/aio.cc
new file mode 100644 (file)
index 0000000..cfe0c5c
--- /dev/null
@@ -0,0 +1,84 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "aio.h"
+
+#if defined(HAVE_LIBAIO)
+
+
+int aio_queue_t::submit(aio_t &aio, int *retries)
+{
+  // 2^16 * 125us = ~8 seconds, so max sleep is ~16 seconds
+  int attempts = 16;
+  int delay = 125;
+  iocb *piocb = &aio.iocb;
+  int r;
+  while (true) {
+    r = io_submit(ctx, 1, &piocb);
+    if (r < 0) {
+      if (r == -EAGAIN && attempts-- > 0) {
+       usleep(delay);
+       delay *= 2;
+       (*retries)++;
+       continue;
+      }
+    }
+    assert(r == 1);
+    break;
+  }
+  return r;
+}
+
+int aio_queue_t::submit_batch(aio_iter begin, aio_iter end, 
+                             uint16_t aios_size, void *priv, 
+                             int *retries)
+{
+  // 2^16 * 125us = ~8 seconds, so max sleep is ~16 seconds
+  int attempts = 16;
+  int delay = 125;
+
+  aio_iter cur = begin;
+  struct iocb *piocb[aios_size];
+  int r, pos = 0;
+  while (cur != end) {
+    cur->priv = priv;
+    *(piocb+pos) = &cur->iocb;
+    ++pos;
+    ++cur;
+  }
+  while (true) {
+    r = io_submit(ctx, pos, piocb);
+    if (r < 0) {
+      if (r == -EAGAIN && attempts-- > 0) {
+       usleep(delay);
+       delay *= 2;
+       (*retries)++;
+       continue;
+      }
+    }
+    break;
+  }
+  return r;
+}
+
+int aio_queue_t::get_next_completed(int timeout_ms, aio_t **paio, int max)
+{
+  io_event event[max];
+  struct timespec t = {
+    timeout_ms / 1000,
+    (timeout_ms % 1000) * 1000 * 1000
+  };
+
+  int r = 0;
+  do {
+    r = io_getevents(ctx, 1, max, event, &t);
+  } while (r == -EINTR);
+
+  for (int i=0; i<r; ++i) {
+    paio[i] = (aio_t *)event[i].obj;
+    paio[i]->rval = event[i].res;
+  }
+  return r;
+}
+
+#endif
diff --git a/src/os/bluestore/aio.h b/src/os/bluestore/aio.h
new file mode 100644 (file)
index 0000000..2517e5f
--- /dev/null
@@ -0,0 +1,94 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#pragma once
+
+#include "acconfig.h"
+#ifdef HAVE_LIBAIO
+# include <libaio.h>
+
+#include <boost/intrusive/list.hpp>
+#include <boost/container/small_vector.hpp>
+
+#include "include/buffer.h"
+#include "include/types.h"
+
+struct aio_t {
+  struct iocb iocb;  // must be first element; see shenanigans in aio_queue_t
+  void *priv;
+  int fd;
+  boost::container::small_vector<iovec,4> iov;
+  uint64_t offset, length;
+  int rval;
+  bufferlist bl;  ///< write payload (so that it remains stable for duration)
+
+  boost::intrusive::list_member_hook<> queue_item;
+
+  aio_t(void *p, int f) : priv(p), fd(f), offset(0), length(0), rval(-1000) {
+  }
+
+  void pwritev(uint64_t _offset, uint64_t len) {
+    offset = _offset;
+    length = len;
+    io_prep_pwritev(&iocb, fd, &iov[0], iov.size(), offset);
+  }
+  void pread(uint64_t _offset, uint64_t len) {
+    offset = _offset;
+    length = len;
+    bufferptr p = buffer::create_page_aligned(length);
+    io_prep_pread(&iocb, fd, p.c_str(), length, offset);
+    bl.append(std::move(p));
+  }
+
+  int get_return_value() {
+    return rval;
+  }
+};
+
+typedef boost::intrusive::list<
+  aio_t,
+  boost::intrusive::member_hook<
+    aio_t,
+    boost::intrusive::list_member_hook<>,
+    &aio_t::queue_item> > aio_list_t;
+
+struct aio_queue_t {
+  int max_iodepth;
+  io_context_t ctx;
+
+  typedef list<aio_t>::iterator aio_iter;
+
+  explicit aio_queue_t(unsigned max_iodepth)
+    : max_iodepth(max_iodepth),
+      ctx(0) {
+  }
+  ~aio_queue_t() {
+    assert(ctx == 0);
+  }
+
+  int init() {
+    assert(ctx == 0);
+    int r = io_setup(max_iodepth, &ctx);
+    if (r < 0) {
+      if (ctx) {
+       io_destroy(ctx);
+       ctx = 0;
+      }
+    }
+    return r;
+  }
+  void shutdown() {
+    if (ctx) {
+      int r = io_destroy(ctx);
+      assert(r == 0);
+      ctx = 0;
+    }
+  }
+
+  int submit(aio_t &aio, int *retries);
+  int submit_batch(aio_iter begin, aio_iter end, uint16_t aios_size, 
+                  void *priv, int *retries);
+  int get_next_completed(int timeout_ms, aio_t **paio, int max);
+};
+
+#endif
diff --git a/src/os/fs/aio.cc b/src/os/fs/aio.cc
deleted file mode 100644 (file)
index cfe0c5c..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include "aio.h"
-
-#if defined(HAVE_LIBAIO)
-
-
-int aio_queue_t::submit(aio_t &aio, int *retries)
-{
-  // 2^16 * 125us = ~8 seconds, so max sleep is ~16 seconds
-  int attempts = 16;
-  int delay = 125;
-  iocb *piocb = &aio.iocb;
-  int r;
-  while (true) {
-    r = io_submit(ctx, 1, &piocb);
-    if (r < 0) {
-      if (r == -EAGAIN && attempts-- > 0) {
-       usleep(delay);
-       delay *= 2;
-       (*retries)++;
-       continue;
-      }
-    }
-    assert(r == 1);
-    break;
-  }
-  return r;
-}
-
-int aio_queue_t::submit_batch(aio_iter begin, aio_iter end, 
-                             uint16_t aios_size, void *priv, 
-                             int *retries)
-{
-  // 2^16 * 125us = ~8 seconds, so max sleep is ~16 seconds
-  int attempts = 16;
-  int delay = 125;
-
-  aio_iter cur = begin;
-  struct iocb *piocb[aios_size];
-  int r, pos = 0;
-  while (cur != end) {
-    cur->priv = priv;
-    *(piocb+pos) = &cur->iocb;
-    ++pos;
-    ++cur;
-  }
-  while (true) {
-    r = io_submit(ctx, pos, piocb);
-    if (r < 0) {
-      if (r == -EAGAIN && attempts-- > 0) {
-       usleep(delay);
-       delay *= 2;
-       (*retries)++;
-       continue;
-      }
-    }
-    break;
-  }
-  return r;
-}
-
-int aio_queue_t::get_next_completed(int timeout_ms, aio_t **paio, int max)
-{
-  io_event event[max];
-  struct timespec t = {
-    timeout_ms / 1000,
-    (timeout_ms % 1000) * 1000 * 1000
-  };
-
-  int r = 0;
-  do {
-    r = io_getevents(ctx, 1, max, event, &t);
-  } while (r == -EINTR);
-
-  for (int i=0; i<r; ++i) {
-    paio[i] = (aio_t *)event[i].obj;
-    paio[i]->rval = event[i].res;
-  }
-  return r;
-}
-
-#endif
diff --git a/src/os/fs/aio.h b/src/os/fs/aio.h
deleted file mode 100644 (file)
index 2517e5f..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#pragma once
-
-#include "acconfig.h"
-#ifdef HAVE_LIBAIO
-# include <libaio.h>
-
-#include <boost/intrusive/list.hpp>
-#include <boost/container/small_vector.hpp>
-
-#include "include/buffer.h"
-#include "include/types.h"
-
-struct aio_t {
-  struct iocb iocb;  // must be first element; see shenanigans in aio_queue_t
-  void *priv;
-  int fd;
-  boost::container::small_vector<iovec,4> iov;
-  uint64_t offset, length;
-  int rval;
-  bufferlist bl;  ///< write payload (so that it remains stable for duration)
-
-  boost::intrusive::list_member_hook<> queue_item;
-
-  aio_t(void *p, int f) : priv(p), fd(f), offset(0), length(0), rval(-1000) {
-  }
-
-  void pwritev(uint64_t _offset, uint64_t len) {
-    offset = _offset;
-    length = len;
-    io_prep_pwritev(&iocb, fd, &iov[0], iov.size(), offset);
-  }
-  void pread(uint64_t _offset, uint64_t len) {
-    offset = _offset;
-    length = len;
-    bufferptr p = buffer::create_page_aligned(length);
-    io_prep_pread(&iocb, fd, p.c_str(), length, offset);
-    bl.append(std::move(p));
-  }
-
-  int get_return_value() {
-    return rval;
-  }
-};
-
-typedef boost::intrusive::list<
-  aio_t,
-  boost::intrusive::member_hook<
-    aio_t,
-    boost::intrusive::list_member_hook<>,
-    &aio_t::queue_item> > aio_list_t;
-
-struct aio_queue_t {
-  int max_iodepth;
-  io_context_t ctx;
-
-  typedef list<aio_t>::iterator aio_iter;
-
-  explicit aio_queue_t(unsigned max_iodepth)
-    : max_iodepth(max_iodepth),
-      ctx(0) {
-  }
-  ~aio_queue_t() {
-    assert(ctx == 0);
-  }
-
-  int init() {
-    assert(ctx == 0);
-    int r = io_setup(max_iodepth, &ctx);
-    if (r < 0) {
-      if (ctx) {
-       io_destroy(ctx);
-       ctx = 0;
-      }
-    }
-    return r;
-  }
-  void shutdown() {
-    if (ctx) {
-      int r = io_destroy(ctx);
-      assert(r == 0);
-      ctx = 0;
-    }
-  }
-
-  int submit(aio_t &aio, int *retries);
-  int submit_batch(aio_iter begin, aio_iter end, uint16_t aios_size, 
-                  void *priv, int *retries);
-  int get_next_completed(int timeout_ms, aio_t **paio, int max);
-};
-
-#endif