return 0;
}
-void BlueFS::_add_block_extent(unsigned id, uint64_t offset, uint64_t length,
- bool skip)
+void BlueFS::_add_block_extent(bool create, unsigned id, uint64_t offset,
+ uint64_t length, bool skip)
{
dout(1) << __func__ << " bdev " << id
+ << " create " << create
<< " 0x" << std::hex << offset << "~" << length << std::dec
<< " skip " << skip
<< dendl;
ceph_assert(bdev[id]->get_size() >= offset + length);
block_all[id].insert(offset, length);
- if (id < alloc.size() && alloc[id] && alloc[id] != shared_bdev_alloc) {
+ if (!create) {
+ ceph_assert(id < alloc.size());
+ ceph_assert(alloc[id]);
if (!skip)
log_t.op_alloc_add(id, offset, length);
- alloc[id]->init_add_free(offset, length);
+ if (alloc[id] != shared_bdev_alloc) {
+ alloc[id]->init_add_free(offset, length);
+ }
}
dout(10) << __func__ << " done" << dendl;
uint64_t used = 0;
for (unsigned id = 0; id < MAX_BDEV; ++id) {
if (alloc[id]) {
- used += block_all[id].size() - alloc[id]->get_free();
+ if (alloc[id] != shared_bdev_alloc) {
+ used += block_all[id].size() - alloc[id]->get_free();
+ } else {
+ used += shared_bdev_used;
+ }
}
}
return used;
}
+uint64_t BlueFS::get_used(unsigned id)
+{
+ ceph_assert(id < alloc.size());
+ ceph_assert(alloc[id]);
+ std::lock_guard l(lock);
+ uint64_t used = 0;
+ if (alloc[id] != shared_bdev_alloc) {
+ used = block_all[id].size() - alloc[id]->get_free();
+ } else {
+ used += shared_bdev_used;
+ }
+ return used;
+}
+
uint64_t BlueFS::get_total(unsigned id)
{
std::lock_guard l(lock);
}
// init freelist
- dout(1) << __func__ << " shared_bdev_used = " << shared_bdev_used << dendl;
for (auto& p : file_map) {
dout(30) << __func__ << " noting alloc for " << p.second->fnode << dendl;
for (auto& q : p.second->fnode.extents) {
}
if (create) {
bluefs->add_block_extent(
+ create,
BlueFS::BDEV_DB,
SUPER_RESERVED,
bluefs->get_block_device_size(BlueFS::BDEV_DB) - SUPER_RESERVED);
auto reserved = _get_ondisk_reserved();
bluefs->add_block_extent(
+ create,
bluefs_layout.shared_bdev,
reserved,
p2align(bdev->get_size(), min_alloc_size) - reserved);
if (create) {
bluefs->add_block_extent(
+ create,
BlueFS::BDEV_WAL, BDEV_LABEL_BLOCK_SIZE,
bluefs->get_block_device_size(BlueFS::BDEV_WAL) -
BDEV_LABEL_BLOCK_SIZE);
ceph_assert(r == 0);
r = _lock_fsid();
ceph_assert(r == 0);
- r = _open_bluefs(false);
+
+ r = _open_bdev(false);
+ ceph_assert(r == 0);
+
+ r = _open_db_and_around(true);
ceph_assert(r == 0);
+
return r;
}
void BlueStore::_umount_for_bluefs()
{
- _close_bluefs(false);
+ _close_db_and_around(true);
+ _close_bdev();
_close_fsid();
_close_path();
}
bluefs->mount();
bluefs->add_block_extent(
+ false,
id,
reserved,
bluefs->get_block_device_size(id) - reserved, true);
uint64_t used_space = 0;
for(auto src_id : devs_source) {
- used_space += bluefs->get_total(src_id) - bluefs->get_free(src_id);
+ used_space += bluefs->get_used(src_id);
}
uint64_t target_free = bluefs->get_free(id);
if (target_free < used_space) {
<< " can't migrate, free space at target: " << target_free
<< " is less than required space: " << used_space
<< dendl;
- return -ENOSPC;
+ r = -ENOSPC;
+ goto shutdown;
}
if (devs_source.count(BlueFS::BDEV_DB)) {
bluefs_layout.shared_bdev = BlueFS::BDEV_DB;
bluefs->mount();
bluefs->add_block_extent(
+ false,
id, reserved, bluefs->get_block_device_size(id) - reserved);
r = bluefs->device_migrate_to_new(cct, devs_source, id, bluefs_layout);
out << devid
<<" : expanding " << " from 0x" << std::hex
<< end << " to 0x" << size << std::dec << std::endl;
- bluefs->add_block_extent(devid, end, size-end);
+ bluefs->add_block_extent(false, devid, end, size-end);
string p = get_device_path(devid);
const char* path = p.c_str();
if (path == nullptr) {
out << bluefs_layout.shared_bdev
<< " : expanding " << " from 0x" << std::hex
<< size0 << " to 0x" << size << std::dec << std::endl;
+ bluefs->add_block_extent(false,
+ bluefs_layout.shared_bdev, size0, size - size0);
_write_out_fm_meta(size);
if (bdev->supported_bdev_label()) {
if (_set_bdev_label_size(path, size) >= 0) {
uuid_d fsid;
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
}
TempBdev bdev{size};
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
{
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
TempBdev bdev{size};
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
TempBdev bdev{size};
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
uint64_t total_written = 0;
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());
BlueFS fs(g_ceph_context);
ASSERT_EQ(0, fs.add_block_device(BlueFS::BDEV_DB, bdev.path, false));
- fs.add_block_extent(BlueFS::BDEV_DB, 1048576, size - 1048576);
+ fs.add_block_extent(true, BlueFS::BDEV_DB, 1048576, size - 1048576);
uuid_d fsid;
ASSERT_EQ(0, fs.mkfs(fsid, { BlueFS::BDEV_DB, false, false }));
ASSERT_EQ(0, fs.mount());