]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: make buffer lru private
authorSage Weil <sage@redhat.com>
Fri, 10 Jun 2016 12:38:55 +0000 (08:38 -0400)
committerSage Weil <sage@redhat.com>
Wed, 22 Jun 2016 15:28:40 +0000 (11:28 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index f6ada30d9ace87d321f88333e26bd42cf9ced973..f000690f8b30b2b4068ae75f03a564e5afbc7fc5 100644 (file)
@@ -610,7 +610,7 @@ void BlueStore::BufferSpace::_discard(uint64_t offset, uint64_t length)
       break;
     }
     if (b->offset < offset) {
-      uint64_t front = offset - b->offset;
+      int64_t front = offset - b->offset;
       if (b->end() > end) {
        // drop middle (split)
        uint64_t tail = b->end() - end;
@@ -621,15 +621,13 @@ 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;
+       cache->_adjust_buffer_size(b, front - (int64_t)b->length);
        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;
+       cache->_adjust_buffer_size(b, front - (int64_t)b->length);
        b->truncate(front);
        ++i;
        continue;
index ee4ab548652e4f129b0495eb6d3a044097dc8795..8796a8046f134cc02b23be2f7cc9687b63d90fed 100644 (file)
@@ -211,8 +211,7 @@ public:
     void _add_buffer(Buffer *b) {
       cache->_audit_lru("_add_buffer start");
       buffer_map[b->offset].reset(b);
-      cache->buffer_lru.push_front(*b);
-      cache->buffer_size += b->length;
+      cache->_add_buffer(b);
       if (b->is_writing()) {
        writing.push_back(*b);
       }
@@ -223,9 +222,7 @@ public:
     }
     void _rm_buffer(map<uint64_t,std::unique_ptr<Buffer>>::iterator p) {
       cache->_audit_lru("_rm_buffer start");
-      assert(cache->buffer_size >= p->second->length);
-      cache->buffer_size -= p->second->length;
-      cache->buffer_lru.erase(cache->buffer_lru.iterator_to(*p->second));
+      cache->_rm_buffer(p->second.get());
       if (p->second->is_writing()) {
        writing.erase(writing.iterator_to(*p->second));
       }
@@ -501,9 +498,6 @@ public:
         Onode,
        boost::intrusive::list_member_hook<>,
        &Onode::lru_item> > onode_lru_list_t;
-    onode_lru_list_t onode_lru;
-
-  public:
     typedef boost::intrusive::list<
       Buffer,
       boost::intrusive::member_hook<
@@ -511,10 +505,15 @@ public:
        boost::intrusive::list_member_hook<>,
        &Buffer::lru_item> > buffer_lru_list_t;
 
-    std::mutex lock;                ///< protect lru and other structures
+    onode_lru_list_t onode_lru;
+
     buffer_lru_list_t buffer_lru;
     uint64_t buffer_size = 0;
 
+  public:
+
+    std::mutex lock;                ///< protect lru and other structures
+
     void _add_onode(OnodeRef& o) {
         onode_lru.push_front(*o);
     }
@@ -524,6 +523,20 @@ public:
     }
     void _touch_onode(OnodeRef& o);
 
+    void _add_buffer(Buffer *b) {
+      buffer_lru.push_front(*b);
+      buffer_size += b->length;
+    }
+    void _rm_buffer(Buffer *b) {
+      assert(buffer_size >= b->length);
+      buffer_size -= b->length;
+      auto q = buffer_lru.iterator_to(*b);
+      buffer_lru.erase(q);
+    }
+    void _adjust_buffer_size(Buffer *b, int64_t delta) {
+      assert((int64_t)buffer_size + delta >= 0);
+      buffer_size += delta;
+    }
     void _touch_buffer(Buffer *b) {
       auto p = buffer_lru.iterator_to(*b);
       buffer_lru.erase(p);