]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/KernelDevice: add discard command
authorTaeksang Kim <voidbag@gmail.com>
Sat, 22 Apr 2017 06:14:07 +0000 (15:14 +0900)
committerTaeksang Kim <voidbag@gmail.com>
Tue, 20 Feb 2018 15:00:52 +0000 (00:00 +0900)
Discard method is added for ssd's performance.

Signed-off-by: Taeksang Kim <voidbag@gmail.com>
src/os/bluestore/BlockDevice.h
src/os/bluestore/KernelDevice.cc
src/os/bluestore/KernelDevice.h

index 012b31d7e9ceb33f1590a78beaad40a9a61201db..90c02067eca408ab540e72e966e62b750d3e1969 100644 (file)
@@ -32,7 +32,7 @@
 #endif
 #include "include/assert.h"
 #include "include/buffer.h"
-
+#include "include/interval_set.h"
 #define SPDK_PREFIX "spdk:"
 
 class CephContext;
@@ -178,6 +178,7 @@ public:
     IOContext *ioc,
     bool buffered) = 0;
   virtual int flush() = 0;
+  virtual int discard(uint64_t offset, uint64_t len) { return 0; }
 
   void queue_reap_ioc(IOContext *ioc);
   void reap_ioc();
index dbc384eebb1649c21e55f3df74f3d2142ab9f50f..68f5664245eb0c223a6ed99f2b6680033d914516 100644 (file)
@@ -659,6 +659,14 @@ int KernelDevice::aio_write(
   return 0;
 }
 
+int KernelDevice::discard(uint64_t offset, uint64_t len)
+{
+  int r = 0;
+  if (!rotational)
+    r = block_device_discard(fd_direct, (int64_t)offset, (int64_t)len);
+  return r;
+}
+
 int KernelDevice::read(uint64_t off, uint64_t len, bufferlist *pbl,
                      IOContext *ioc,
                      bool buffered)
index c0c797f0461834b12c32540551eaefc4e7f4e247..e31978a0af9c03d7c4c4d8e2c8cfd4456d00b9b5 100644 (file)
@@ -99,6 +99,7 @@ public:
                IOContext *ioc,
                bool buffered) override;
   int flush() override;
+  int discard(uint64_t offset, uint64_t len) override;
 
   // for managing buffered readers/writers
   int invalidate_cache(uint64_t off, uint64_t len) override;