]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
os/bluestore: fix missing discard in BlueStore::_kv_sync_thread
authorTang Junhui <tangjunhui.linux@gmail.com>
Mon, 29 Apr 2019 08:31:55 +0000 (16:31 +0800)
committerTang Junhui <tangjunhui.linux@gmail.com>
Wed, 8 May 2019 01:17:39 +0000 (09:17 +0800)
Discard comand should be issued before space released.

Signed-off-by: Junhui Tang <tangjunhui@sangfor.com.cn>
Fixes: https://tracker.ceph.com/issues/39621
src/os/bluestore/BlueStore.cc

index e0de190a1dd8d59e3d24852b42632a09c31bbc0f..1fb13f409a092487b6722b13586ab6e14f0857a4 100644 (file)
@@ -9874,7 +9874,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();
        }
       }