From: xie xingguo Date: Mon, 20 Jun 2016 12:02:41 +0000 (+0800) Subject: os/bluestore: simplify BufferSpace::read() a little X-Git-Tag: v11.0.0~97^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d2baf233fcfa47d14b3fa4f8315f64159a4d19b8;p=ceph.git os/bluestore: simplify BufferSpace::read() a little Signed-off-by: xie xingguo --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 26c208aae857d..e5ed108359322 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;