From: Sage Weil Date: Mon, 25 Apr 2016 00:05:56 +0000 (-0400) Subject: os/bluestore/FreelistManager: switch up init procedure X-Git-Tag: v11.0.0~643^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=db9a96bec3ec71a4645b63845c999b77a1a555ba;p=ceph.git os/bluestore/FreelistManager: switch up init procedure 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 --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 57d69c6a887a..14a777b81cd1 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -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)); } diff --git a/src/os/bluestore/FreelistManager.h b/src/os/bluestore/FreelistManager.h index 76747d7dc526..caaa5a5a5429 100644 --- a/src/os/bluestore/FreelistManager.h +++ b/src/os/bluestore/FreelistManager.h @@ -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; }