From: Taeksang Kim Date: Sat, 22 Apr 2017 06:14:07 +0000 (+0900) Subject: os/bluestore/KernelDevice: add discard command X-Git-Tag: v13.0.2~199^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=465c21ddede82a5ce1ae444bc157448eeaf627cc;p=ceph.git os/bluestore/KernelDevice: add discard command Discard method is added for ssd's performance. Signed-off-by: Taeksang Kim --- diff --git a/src/os/bluestore/BlockDevice.h b/src/os/bluestore/BlockDevice.h index 012b31d7e9ce..90c02067eca4 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 dbc384eebb16..68f5664245eb 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 c0c797f04618..e31978a0af9c 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;