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 <wangyunqing@inspur.com>
// 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();