]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: fix writing buffers may get pinned 15911/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Wed, 28 Jun 2017 09:40:31 +0000 (17:40 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Wed, 28 Jun 2017 09:50:35 +0000 (17:50 +0800)
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/bluestore/BlueStore.h

index 6eb13b1f3a588ee79236cd6578fcd6f07c2b22a8..dd267ea22e4c0b57cde094b5e0a54a6fb3516a92 100644 (file)
@@ -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);