From 8c5d620082998eeca45f222ac780c0610f2596a7 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Wed, 28 Jun 2017 17:40:31 +0800 Subject: [PATCH] os/bluestore: fix writing buffers may get pinned Signed-off-by: xie xingguo --- src/os/bluestore/BlueStore.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 6eb13b1f3a588..dd267ea22e4c0 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); -- 2.47.3