From: xie xingguo Date: Wed, 28 Jun 2017 09:40:31 +0000 (+0800) Subject: os/bluestore: fix writing buffers may get pinned X-Git-Tag: ses5-milestone8^2~13^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8c5d620082998eeca45f222ac780c0610f2596a7;p=ceph.git os/bluestore: fix writing buffers may get pinned Signed-off-by: xie xingguo --- diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 6eb13b1f3a58..dd267ea22e4c 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -263,7 +263,19 @@ public: buffer_map[b->offset].reset(b); if (b->is_writing()) { b->data.reassign_to_mempool(mempool::mempool_bluestore_writing); - writing.push_back(*b); + if (writing.empty() || writing.rbegin()->seq <= b->seq) { + writing.push_back(*b); + } else { + auto it = writing.begin(); + while (it->seq < b->seq) { + ++it; + } + + assert(it->seq >= b->seq); + // note that this will insert b before it + // hence the order is maintained + writing.insert(it, *b); + } } else { b->data.reassign_to_mempool(mempool::mempool_bluestore_cache_data); cache->_add_buffer(b, level, near);