From cd24dc855b12ca2df2487eb4eceabbfd9685fafb Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 23 Jun 2016 17:08:32 -0400 Subject: [PATCH] os/bluestore: fix buffer discard accounting for 2Q Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 0131f1fc1ed..359de96cbdc 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -798,6 +798,7 @@ void BlueStore::BufferSpace::_clear() int BlueStore::BufferSpace::_discard(uint64_t offset, uint64_t length) { // note: we already hold cache->lock + dout(20) << __func__ << std::hex << " 0x" << offset << "~" << length << dendl; int cache_private = 0; cache->_audit("discard start"); auto i = _data_lower_bound(offset); @@ -822,13 +823,17 @@ int BlueStore::BufferSpace::_discard(uint64_t offset, uint64_t length) } else { _add_buffer(new Buffer(this, b->state, b->seq, end, tail), 0, b); } - cache->_adjust_buffer_size(b, front - (int64_t)b->length); + if (!b->is_writing()) { + cache->_adjust_buffer_size(b, front - (int64_t)b->length); + } b->truncate(front); cache->_audit("discard end 1"); break; } else { // drop tail - cache->_adjust_buffer_size(b, front - (int64_t)b->length); + if (!b->is_writing()) { + cache->_adjust_buffer_size(b, front - (int64_t)b->length); + } b->truncate(front); ++i; continue; -- 2.39.5