OPTION(bluestore_bluefs, OPT_BOOL, true)
OPTION(bluestore_bluefs_env_mirror, OPT_BOOL, false) // mirror to normal Env for debug
-OPTION(bluestore_bluefs_initial_length, OPT_U64, 65536*1024)
OPTION(bluestore_bluefs_min_ratio, OPT_FLOAT, .01)
OPTION(bluestore_bluefs_min_free_ratio, OPT_FLOAT, .1)
OPTION(bluestore_bluefs_max_free_fs_main_ratio, OPT_FLOAT, .8)
if (create) {
// note: we might waste a 4k block here if block.db is used, but it's
// simpler.
- bluefs->add_block_extent(id, BLUEFS_START,
- g_conf->bluestore_bluefs_initial_length);
+ uint64_t initial =
+ bdev->get_size() * g_conf->bluestore_bluefs_min_ratio;
+ initial = ROUND_UP_TO(initial, g_conf->bluefs_alloc_size);
+ bluefs->add_block_extent(id, BLUEFS_START, initial);
+ bluefs_extents.insert(BLUEFS_START, initial);
}
bluefs_shared_bdev = id;
++id;
KeyValueDB::Transaction t = db->get_transaction();
uint64_t reserved = 0;
if (g_conf->bluestore_bluefs) {
- reserved = BLUEFS_START + g_conf->bluestore_bluefs_initial_length;
- dout(20) << __func__ << " reserved first " << reserved
- << " bytes for bluefs" << dendl;
- bluefs_extents.insert(BLUEFS_START,
- g_conf->bluestore_bluefs_initial_length);
+ assert(bluefs_extents.num_intervals() == 1);
+ interval_set<uint64_t>::iterator p = bluefs_extents.begin();
+ reserved = p.get_start() + p.get_len();
+ dout(20) << __func__ << " reserved " << reserved << " for bluefs" << dendl;
bufferlist bl;
::encode(bluefs_extents, bl);
t->set(PREFIX_SUPER, "bluefs_extents", bl);