From 465c21ddede82a5ce1ae444bc157448eeaf627cc Mon Sep 17 00:00:00 2001 From: Taeksang Kim Date: Sat, 22 Apr 2017 15:14:07 +0900 Subject: [PATCH] os/bluestore/KernelDevice: add discard command Discard method is added for ssd's performance. Signed-off-by: Taeksang Kim --- src/os/bluestore/BlockDevice.h | 3 ++- src/os/bluestore/KernelDevice.cc | 8 ++++++++ src/os/bluestore/KernelDevice.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/os/bluestore/BlockDevice.h b/src/os/bluestore/BlockDevice.h index 012b31d7e9ceb..90c02067eca40 100644 --- a/src/os/bluestore/BlockDevice.h +++ b/src/os/bluestore/BlockDevice.h @@ -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(); diff --git a/src/os/bluestore/KernelDevice.cc b/src/os/bluestore/KernelDevice.cc index dbc384eebb164..68f5664245eb0 100644 --- a/src/os/bluestore/KernelDevice.cc +++ b/src/os/bluestore/KernelDevice.cc @@ -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) diff --git a/src/os/bluestore/KernelDevice.h b/src/os/bluestore/KernelDevice.h index c0c797f046183..e31978a0af9c0 100644 --- a/src/os/bluestore/KernelDevice.h +++ b/src/os/bluestore/KernelDevice.h @@ -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; -- 2.39.5