From 14a021c4e1fc9db0a45908b66fffe907e1a8e570 Mon Sep 17 00:00:00 2001 From: Tang Junhui Date: Mon, 29 Apr 2019 16:31:55 +0800 Subject: [PATCH] os/bluestore: fix missing discard in BlueStore::_kv_sync_thread Discard comand should be issued before space released. Signed-off-by: Junhui Tang Fixes: https://tracker.ceph.com/issues/39621 (cherry picked from commit f6205d2eb2b8297b914afbaf54a8311f087eec90) --- src/os/bluestore/BlueStore.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 552625a437841..ecdc3de95fcde 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -10555,7 +10555,20 @@ void BlueStore::_kv_sync_thread() if (!bluefs_extents_reclaiming.empty()) { dout(0) << __func__ << " releasing old bluefs 0x" << std::hex << bluefs_extents_reclaiming << std::dec << dendl; + int r = 0; + if (cct->_conf->bdev_enable_discard && cct->_conf->bdev_async_discard) { + r = bdev->queue_discard(bluefs_extents_reclaiming); + if (r == 0) { + goto clear; + } + } else if (cct->_conf->bdev_enable_discard) { + for (auto p = bluefs_extents_reclaiming.begin(); p != bluefs_extents_reclaiming.end(); ++p) { + bdev->discard(p.get_start(), p.get_len()); + } + } + alloc->release(bluefs_extents_reclaiming); +clear: bluefs_extents_reclaiming.clear(); } } -- 2.39.5