From: wangyunqing Date: Wed, 11 May 2022 08:41:13 +0000 (+0800) Subject: os/bluestore: use swap for deferred_stable when not bluefs_layout.single_shared_device() X-Git-Tag: v18.0.0~542^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=234d1c854494d96e5f06b7c29dc8463bc7b2963e;p=ceph.git os/bluestore: use swap for deferred_stable when not bluefs_layout.single_shared_device() Fixes: https://tracker.ceph.com/issues/55608 When `bluefs_layout.single_shared_device()` is false and `deferred_done` is not empty, the `deferred_stable_queue` is always empty which make `deferred_stable` empty also. So we can use swap instead of insert when insert key of `deferred_done` to `deferred_stable`. Signed-off-by: wangyunqing --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 1263f19a4c710..6a352922cab86 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -13251,10 +13251,14 @@ void BlueStore::_kv_sync_thread() // flush/barrier on block device bdev->flush(); - // if we flush then deferred done are now deferred stable - deferred_stable.insert(deferred_stable.end(), deferred_done.begin(), - deferred_done.end()); - deferred_done.clear(); + // if we flush then deferred done are now deferred stable + if (deferred_stable.empty()) { + deferred_stable.swap(deferred_done); + } else { + deferred_stable.insert(deferred_stable.end(), deferred_done.begin(), + deferred_done.end()); + deferred_done.clear(); + } } auto after_flush = mono_clock::now();