From d2baf233fcfa47d14b3fa4f8315f64159a4d19b8 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Mon, 20 Jun 2016 20:02:41 +0800 Subject: [PATCH] os/bluestore: simplify BufferSpace::read() a little Signed-off-by: xie xingguo --- src/os/bluestore/BlueStore.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 26c208aae85..e5ed1083593 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -606,14 +606,14 @@ void BlueStore::BufferSpace::_discard(uint64_t offset, uint64_t length) uint64_t end = offset + length; while (i != buffer_map.end()) { Buffer *b = i->second.get(); - if (b->offset >= offset + length) { + if (b->offset >= end) { break; } if (b->offset < offset) { uint64_t front = offset - b->offset; - if (b->offset + b->length > offset + length) { + if (b->end() > end) { // drop middle (split) - uint64_t tail = b->offset + b->length - (offset + length); + uint64_t tail = b->end() - end; if (b->data.length()) { bufferlist bl; bl.substr_of(b->data, b->length - tail, tail); @@ -621,12 +621,14 @@ void BlueStore::BufferSpace::_discard(uint64_t offset, uint64_t length) } else { _add_buffer(new Buffer(this, b->state, b->seq, end, tail)); } + assert(cache->buffer_size >= b->length - front); cache->buffer_size -= b->length - front; b->truncate(front); cache->_audit_lru("discard end 1"); return; } else { // drop tail + assert(cache->buffer_size >= b->length - front); cache->buffer_size -= b->length - front; b->truncate(front); ++i; -- 2.39.5