]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/Allocator: add unreserve()
authorSage Weil <sage@redhat.com>
Wed, 23 Dec 2015 15:19:49 +0000 (10:19 -0500)
committerSage Weil <sage@redhat.com>
Fri, 1 Jan 2016 18:07:29 +0000 (13:07 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/Allocator.h
src/os/bluestore/StupidAllocator.cc
src/os/bluestore/StupidAllocator.h

index 63df4c98f45165d3e155470cd24705d8707d72e8..6df2267ca41c124dd148adfed6095455ff25f43d 100644 (file)
@@ -23,6 +23,7 @@ public:
   virtual ~Allocator() {}
 
   virtual int reserve(uint64_t need) = 0;
+  virtual void unreserve(uint64_t unused) = 0;
 
   virtual int allocate(
     uint64_t need_size, uint64_t alloc_unit, int64_t hint,
index be4d5633e454e366be7c592730797fcb1ad3ed45..a1ee90ed9715610f01c542614b0ec4907fd82320 100644 (file)
@@ -58,12 +58,21 @@ int StupidAllocator::reserve(uint64_t need)
   Mutex::Locker l(lock);
   dout(10) << __func__ << " need " << need << " num_free " << num_free
           << " num_reserved " << num_reserved << dendl;
-  if (need > num_free - num_reserved)
+  if ((int64_t)need > num_free - num_reserved)
     return -ENOSPC;
   num_reserved += need;
   return 0;
 }
 
+void StupidAllocator::unreserve(uint64_t unused)
+{
+  Mutex::Locker l(lock);
+  dout(10) << __func__ << " unused " << unused << " num_free " << num_free
+          << " num_reserved " << num_reserved << dendl;
+  assert(unused >= num_reserved);
+  num_reserved -= unused;
+}
+
 int StupidAllocator::allocate(
   uint64_t need_size, uint64_t alloc_unit, int64_t hint,
   uint64_t *offset, uint32_t *length)
index cad115d417c0866af9e8285f5008e6ac347d8c60..ec71b863df192f24de741f8d6f7af5dc98e7bbd4 100644 (file)
@@ -30,6 +30,7 @@ public:
   ~StupidAllocator();
 
   int reserve(uint64_t need);
+  void unreserve(uint64_t unused);
 
   int allocate(
     uint64_t need_size, uint64_t alloc_unit, int64_t hint,