]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/FreelistManager: switch up init procedure
authorSage Weil <sage@redhat.com>
Mon, 25 Apr 2016 00:05:56 +0000 (20:05 -0400)
committerSage Weil <sage@redhat.com>
Sat, 30 Apr 2016 02:15:53 +0000 (22:15 -0400)
Pass device size to create.  At this point we presume the entire device
is free.  Then allocate what we want.  Should have no real effect on
ExtentFreelistManager.

Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/FreelistManager.h

index 57d69c6a887a4f180c350d7fb4995d0f643f508a..14a777b81cd158771971915e2909d8686c4ab941 100644 (file)
@@ -1757,7 +1757,8 @@ int BlueStore::mkfs()
       bl.append(freelist_type);
       t->set(PREFIX_SUPER, "freelist_type", bl);
     }
-    fm->create(t);
+    fm->create(bdev->get_size(), t);
+
     uint64_t reserved = 0;
     if (g_conf->bluestore_bluefs) {
       assert(bluefs_extents.num_intervals() == 1);
@@ -1771,8 +1772,10 @@ int BlueStore::mkfs()
     } else {
       reserved = BLUEFS_START;
     }
-    uint64_t end = bdev->get_size() - reserved;
+    fm->allocate(0, reserved, t);
+
     if (g_conf->bluestore_debug_prefill > 0) {
+      uint64_t end = bdev->get_size() - reserved;
       dout(1) << __func__ << " pre-fragmenting freespace, using "
              << g_conf->bluestore_debug_prefill << " with max free extent "
              << g_conf->bluestore_debug_prefragment_max << dendl;
@@ -1785,14 +1788,12 @@ int BlueStore::mkfs()
        if (start + l > end)
          l = end - start;
        l = ROUND_UP_TO(l, min_alloc_size);
-       fm->release(start, l, t);
        uint64_t u = 1 + (uint64_t)(r * (double)l / (1.0 - r));
        u = ROUND_UP_TO(u, min_alloc_size);
        dout(20) << "  free " << start << "~" << l << " use " << u << dendl;
+       fm->allocate(start + l, u, t);
        start += l + u;
       }
-    } else {
-      fm->release(reserved, end, t);
     }
     assert(0 == db->submit_transaction_sync(t));
   }
index 76747d7dc526e48d1135ccefc4ecc1d1883a159a..caaa5a5a5429601e75bc06fe696579054deca440 100644 (file)
@@ -17,7 +17,8 @@ public:
 
   static FreelistManager *create(string type);
 
-  virtual int create(KeyValueDB::Transaction txn) {
+  virtual int create(uint64_t size, KeyValueDB::Transaction txn) {
+    release(0, size, txn);
     return 0;
   }