]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
BlockDevice: Move KernelDevice reap ioc to BlockDevice
authorHaomai Wang <haomai@xsky.com>
Fri, 8 Jan 2016 16:27:49 +0000 (00:27 +0800)
committerHaomai Wang <haomai@xsky.com>
Mon, 1 Feb 2016 14:00:46 +0000 (22:00 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/os/bluestore/BlockDevice.cc
src/os/bluestore/BlockDevice.h
src/os/bluestore/KernelDevice.cc
src/os/bluestore/KernelDevice.h

index 69bd64ff72e9b9ec3bbedb4dd19abcc9f333e0c2..aed2b80a05eaec08e1ca505329b0c514cf6ae24c 100644 (file)
@@ -54,3 +54,23 @@ BlockDevice *BlockDevice::create(const string& type, aio_callback_t cb, void *cb
   return NULL;
 }
 
+void BlockDevice::queue_reap_ioc(IOContext *ioc)
+{
+  Mutex::Locker l(ioc_reap_lock);
+  if (ioc_reap_count.read() == 0)
+    ioc_reap_count.inc();
+  ioc_reap_queue.push_back(ioc);
+}
+
+void BlockDevice::reap_ioc()
+{
+  if (ioc_reap_count.read()) {
+    Mutex::Locker l(ioc_reap_lock);
+    for (auto p : ioc_reap_queue) {
+      dout(20) << __func__ << " reap ioc " << p << dendl;
+      delete p;
+    }
+    ioc_reap_queue.clear();
+    ioc_reap_count.dec();
+  }
+}
index 32b0d617da805fa253136b66d1a2b82a5a8a145d..a5057260c57141397d38fd386b1d0d16092d23a3 100644 (file)
@@ -57,7 +57,12 @@ struct IOContext {
 
 
 class BlockDevice {
+  Mutex ioc_reap_lock;
+  vector<IOContext*> ioc_reap_queue;
+  atomic_t ioc_reap_count;
+
 public:
+  BlockDevice(): ioc_reap_lock("BlockDevice::ioc_reap_lock") {}
   virtual ~BlockDevice() {}
   typedef void (*aio_callback_t)(void *handle, void *aio);
 
@@ -77,6 +82,9 @@ public:
   virtual int aio_zero(uint64_t off, uint64_t len, IOContext *ioc) = 0;
   virtual int flush() = 0;
 
+  void queue_reap_ioc(IOContext *ioc);
+  void reap_ioc();
+
   // for managing buffered readers/writers
   virtual int invalidate_cache(uint64_t off, uint64_t len) = 0;
   virtual int open(string path) = 0;
index 03c509039cba77c917c57591796b1fd7fcbbd0a9..9dfa820b148eac20275d5907a2f5bc0df652b057 100644 (file)
@@ -36,7 +36,6 @@ KernelDevice::KernelDevice(aio_callback_t cb, void *cbpriv)
     size(0), block_size(0),
     fs(NULL), aio(false), dio(false),
     debug_lock("KernelDevice::debug_lock"),
-    ioc_reap_lock("KernelDevice::ioc_reap_lock"),
     flush_lock("KernelDevice::flush_lock"),
     aio_queue(g_conf->bdev_aio_max_queue_depth),
     aio_callback(cb),
@@ -257,15 +256,7 @@ void KernelDevice::_aio_thread()
        }
       }
     }
-    if (ioc_reap_count.read()) {
-      Mutex::Locker l(ioc_reap_lock);
-      for (auto p : ioc_reap_queue) {
-       dout(20) << __func__ << " reap ioc " << p << dendl;
-       delete p;
-      }
-      ioc_reap_queue.clear();
-      ioc_reap_count.dec();
-    }
+    reap_ioc();
   }
   dout(10) << __func__ << " end" << dendl;
 }
@@ -532,10 +523,3 @@ int KernelDevice::invalidate_cache(uint64_t off, uint64_t len)
   return r;
 }
 
-void KernelDevice::queue_reap_ioc(IOContext *ioc)
-{
-  Mutex::Locker l(ioc_reap_lock);
-  if (ioc_reap_count.read() == 0)
-    ioc_reap_count.inc();
-  ioc_reap_queue.push_back(ioc);
-}
index 454ac825ba04686c56a05b7c3582dc1eaa330343..a61f4e9bfbfddcc6730056a5e4ee6bfb4cfdb39c 100644 (file)
@@ -32,10 +32,6 @@ class KernelDevice : public BlockDevice {
   Mutex debug_lock;
   interval_set<uint64_t> debug_inflight;
 
-  Mutex ioc_reap_lock;
-  vector<IOContext*> ioc_reap_queue;
-  atomic_t ioc_reap_count;
-
   Mutex flush_lock;
   atomic_t io_since_flush;
 
@@ -86,8 +82,6 @@ public:
               IOContext *ioc) override;
   int flush() override;
 
-  void queue_reap_ioc(IOContext *ioc);
-
   // for managing buffered readers/writers
   int invalidate_cache(uint64_t off, uint64_t len) override;
   int open(string path) override;